获取grep输出的空文件

Ank*_*wal 0 linux bash grep scp

我在脚本中运行此命令

while [ 1 ]
do

    if [ -e $LOG ]
    then

            grep -A 5 -B 5 -f $PATTERNS $LOG  >> $FOREMAIL
            break
    fi

done
Run Code Online (Sandbox Code Playgroud)

$ LOG文件是从另一台机器scp的.因此,只要它出现在当前目录中,while循环就会检测到它并执行grep.问题是,$ FOREMAIL文件变为空.但是如果我在脚本之外运行这个grep作为具有相同文件和参数的独立命令,我可以看到它生成一个输出.

我很困惑为什么这个命令在脚本中没有产生o ​​/ p?

Rop*_*ine 5

一旦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}
Run Code Online (Sandbox Code Playgroud)