因此,我正在编写一个 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