当前位置: 首页 > 面试题库 >

重定向bas​​h的输出以进行循环

屠振濂
2023-03-14
问题内容

我有一个简单的BASH命令,看起来像

for i in `seq 2`; do echo $i; done; > out.dat

运行此命令时,输出seq 2会输出到终端,而数据文件(out.dat)不会输出任何内容

我希望标准输出能够像直接执行命令那样重定向到out.dat seq 2 > out.dat


问题答案:

删除分号。

for i in `seq 2`; do echo "$i"; done > out.dat

建议

同样按照Fredrik Pihl的建议,在不需要二进制二进制文件时,或者至少在实际上不使用它们时,请尽量不要使用它们:

for i in {1..2}; do echo "$i"; done > out.dat
for ((i = 1; i <= 2; ++i )); do echo "$i"; done > out.dat
for i in 1 2; do echo "$i"; done > out.dat

另外,请注意words可能导致路径名扩展的输出。

for A in $(echo '*'); do echo "$A"; done

将显示文件而不只是文字*

$()还建议使用Bash和POSIX shell中的命令替换语法```,使其比使用反引号()更清晰,并且支持嵌套。

用于将输出读取到变量的更清洁的解决方案是

while read VAR; do
    ...   
done < <(do something)

read ... < <(do something)  ## Could be done on a loop or with readarray.

for A in "${ARRAY[@]}"; do
    :
done

就预期功能而言,使用printf也可以是一个更容易的选择:

printf '%s\n' {1..2} > out.dat


 类似资料:
  • 问题内容: 通常我会像这样启动一个命令 我知道您可以通过执行以下操作来重定向它 例如摆脱输出或 捕获输出。 但是我有时会忘记,并且想知道事实之后是否有办法捕获或重定向。 或类似的内容,这样我就可以继续使用终端,而不会在终端上弹出消息。 问题答案: 请参阅 从正在运行的进程重定向输出 。 首先,我在一个会话中运行命令,并测试将来自stdin的数据复制到文件中。然后在另一个会话中,我重定向输出。 首先

  • 问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。

  • 问题内容: 我正在尝试使用以下代码重定向在ProcessBuilder的帮助下启动的流程的输出 但是它以失败告终 线程“主”中的异常java.io.IOException:无法运行程序“ / myScript >> / myLogFile 2>&1 <&-&”:java.io.IOException:error = 2,java.lang中没有此类文件或目录.ProcessBuilder.star

  • 到目前为止,我们在标准输出流上显示了数据。 我们还可以将数据重定向到文件。 print或printf语句后出现重定向。 AWK中的重定向就像shell命令中的重定向一样,除了它们是在AWK程序中编写的。 本章通过合适的示例解释重定向。 重定向运算符 重定向运算符的语法是 - 语法 (Syntax) print DATA > output-file 它将数据写入output-file 。 如果输出

  • 问题内容: 如何避免使用HttpClient 4.1.1进行循环重定向。当我得到这样的错误:- 这是我的代码… 问题答案: 您可以将ClientPNames.ALLOW_CIRCULAR_REDIRECTS设置为true,这将允许重定向到同一位置。 在这里查看更多信息

  • 1. Shell 重定向 1.1 Shell 重定向是什么 我们在之前章节有学习 echo/printf 来将我们的需求输出,此时就是我们将系统的返回输出到我们标准终端,使得我们能够看到正常的输出的结果,Unix 命令默认的输入设备即 stdin 为键盘,标准和错误设备即 stdout 为显示器,我们利用重定向可以将输入改为文件,或者将输出重新定向到其他设备或文件中。 1.2 为什么要用重定向 我