【问题标题】:how-to save result of a command in an if statement to a text file如何将 if 语句中的命令结果保存到文本文件
【发布时间】:2022-01-20 09:16:22
【问题描述】:

我需要做类似的事情:

while true
do 
   if  ss --tcp --processes | grep 53501 ; then <save result to /tmp/cmd.out> ; fi
done

【问题讨论】:

    标签: linux bash loops grep


    【解决方案1】:

    本质上不可能完全做到这一点,因为命令(或命令管道)在运行时会产生输出,但在完成运行之前不会产生退出状态(成功/失败) ;因此,在输出完成之前,您无法决定是否保存输出。

    您可以做的是将输出临时存储在某处,然后保存或不保存。我不确定这是否正是你想要做的,但可能是这样的(使用变量作为临时存储):

    while true
    do 
        output=$(ss --tcp --processes | grep 53501)
        if [ -n "$output" ]; then
            echo "$output" >/tmp/cmd.out
        fi
    done
    

    【讨论】:

    • 应该这样做,但要实际测试退出状态,测试可能是 [ $? -eq 0 ],虽然在这种情况下可能没有必要,但我想将 stderr 重定向到 $() 内的 /dev/null
    • @Taqras 是的,但在这种情况下,测试非空输出是等效的,我认为它更清楚。顺便说一句,我更喜欢if output=$(ss --tcp --processes | grep 53501); then ...,而不是单独测试$?
    【解决方案2】:

    while 循环看起来很危险,最终会耗尽磁盘空间。

    while true
    do 
    ss --tcp --processes | grep 53501 &>> /tmp/cmd.out
    sleep 1
    echo "Careful about using while true without any sleep"
    done
    

    &amp;&gt;&gt; 管道并将所有 STDERR 和 STDOUT 附加到文件中,如果 grep 什么也没找到,自然输出将是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-16
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多