我在脚本中运行这个命令
while [ 1 ]
do
if [ -e $LOG ]
then
grep -A 5 -B 5 -f $PATTERNS $LOG >> $FOREMAIL
break
fi
done
$LOG 文件是从另一台机器上 scp 得到的。因此,只要它出现在当前目录中,while 循环就会检测到它并执行 grep。问题是,$FOREMAIL 文件原来是空的。但是,如果我在脚本之外将此 grep 作为具有相同文件和参数的独立命令运行,我可以看到它会生成一个输出。
我很困惑为什么这个命令在脚本中没有生成 o/p?
最佳答案
一旦 scp 创建 文件,-e 就会触发,而它仍然没有数据,并且 grep 正在对一个空文件进行操作。您需要等到文件传输完成。
您可以通过传输到一个临时文件名来完成此操作,而不是从正在推送文件的机器上通过 ssh 运行 mv。
编辑:机器复制到日志文件的代码...
scp $log 192.168.0.1:/logfiles/${log}.tmp
ssh 192.168.0.1 mv /logfiles/${log}.tmp /logfiles/${log}
关于linux - 为 grep 输出获取一个空文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9222896/