如何在bash循环中读取标准输入,然后将文本追加到文件中?

Jos*_*h K 2 macos bash scripting file echo

假设我有一个bash脚本如下

while
 read $f;
do
 cat $f >> output.txt;
 echo "aaa" >> output.txt;
done
Run Code Online (Sandbox Code Playgroud)

然而,第二个echo声明没有被执行.完全没有.我究竟做错了什么?

我正在运行这个

tail -f /var/log/somelog | ./script.sh
Run Code Online (Sandbox Code Playgroud)

$f不应该是空的.它只应在tail通知文件发生变化时输出.

mob*_*mob 6

该变量$f可能为空,并且您的脚本在cat没有参数的调用中挂起.你想说吗?

while read f
Run Code Online (Sandbox Code Playgroud)

代替

while read $f
Run Code Online (Sandbox Code Playgroud)

  • @Josh K:使用这样的变量是"做错了".使用`while read f`,而不是`读取$ f`.您的代码评估为:`read read; 做猫>> output.txt; ...; done`.另外,总是引用您使用的变量来至少从`cat`获取一些错误消息(在这种情况下); 即`cat"$ f"`带有空/未定义的`$ f`会导致`cat ::没有这样的文件或目录`. (2认同)