linux - 为 grep 输出获取一个空文件

标签 linux bash grep scp

我在脚本中运行这个命令

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/

相关文章:

linux - Nginx 上游配置

linux - 我无法通过 Internet 访问我的 Hyper-V Linux Web 服务器

bash:反向(即 NOT)shell 通配符扩展?

bash - 使用 grep 或 ack 可靠地检查 wget 日志中的错误

LINUX:如何查找(grep)从根目录开始的文件?

linux - AWS 亚马逊为小型实例提供 160GB 的空间。在引导 Suse linux 时,总的根分区空间是

在运行中创建结构实例?

linux - 如何使用静态 ip 而不是动态 ip 重新启动 wlan0?

bash - 在 OSX 上的 Virtualenv 中安装 TensorFlow

shell - 如何在awk中对模式进行if else匹配