将 UNIX 输出重定向到附加文件

将 UNIX 输出重定向到附加文件

因此,我正在编写一个 Python 脚本,它将不同的参数传递给 Unix 命令,并且我需要将所有命令输出保存到同一个文件中。

然而我知道的唯一方法是重写文件。有谁知道如何在 Shell 脚本中追加文件

假设我的 Unix 命令是:

Foo

我的操作员是:

bar
bar1
bar2

Unix 命令是:

foo bar > output.txt
foo bar1 > output.txt
foo bar2 > output.txt

output.txt 的内容仅为“foo bar2”

有谁知道如何附加文件,以便所有三个命令输出都将出现在输出文件中?

答案1

三个单独的命令中的每一个都会output.txt在向文件写入新数据之前清空该文件。这就是为什么文件最终只包含最后执行的命令的数据。

要将一组命令重定向到文件,您可以使用

{
    foo bar
    foo bar1
    foo bar2
} >output.txt

或者,在一行中,

{ foo bar; foo bar1; foo bar2; } >output.txt

大括号定义了一个复合命令。终止}重定向后的重定向全部复合命令的整体输出。

由于我们使用>,因此在复合命令的输出写入output.txt文件之前该文件将被清空。如果您想附加到文件,请改用>>


另一种选择:

for operand in bar bar1 bar2; do
    foo "$operand"
done >output.txt

或者,在具有大括号扩展的 shell 中,

for operand in bar{,1,2}; do
    foo "$operand"
done >output.txt

这里,for循环是一个复合命令,可以像{ ...; }上面的复合命令一样重定向。

同样,如果您想保留文件的原始内容output.txt并仅追加到文件中,请使用>>而不是>用于重定向。

答案2

在最后两个命令中,您需要使用>>instead of >,它会附加内容而不是像>以前那样完全替换它。

答案3

所以我在发帖后几分钟就发现了这一点。

答案是替换>>>

语法为:

foo bar >> output.txt
foo bar1 >> output.txt
foo bar2 >> output.txt

单个>是写入文件。

double>是追加到文件中。

答案4

在 Unix shell 中,>>(更大的)符号可用于附加到文件,例如

command >> file.txt

相关内容