【发布时间】:2022-01-20 09:16:22
【问题描述】:
我需要做类似的事情:
while true
do
if ss --tcp --processes | grep 53501 ; then <save result to /tmp/cmd.out> ; fi
done
【问题讨论】:
我需要做类似的事情:
while true
do
if ss --tcp --processes | grep 53501 ; then <save result to /tmp/cmd.out> ; fi
done
【问题讨论】:
本质上不可能完全做到这一点,因为命令(或命令管道)在运行时会产生输出,但在完成运行之前不会产生退出状态(成功/失败) ;因此,在输出完成之前,您无法决定是否保存输出。
您可以做的是将输出临时存储在某处,然后保存或不保存。我不确定这是否正是你想要做的,但可能是这样的(使用变量作为临时存储):
while true
do
output=$(ss --tcp --processes | grep 53501)
if [ -n "$output" ]; then
echo "$output" >/tmp/cmd.out
fi
done
【讨论】:
if output=$(ss --tcp --processes | grep 53501); then ...,而不是单独测试$?。
while 循环看起来很危险,最终会耗尽磁盘空间。
while true
do
ss --tcp --processes | grep 53501 &>> /tmp/cmd.out
sleep 1
echo "Careful about using while true without any sleep"
done
&>> 管道并将所有 STDERR 和 STDOUT 附加到文件中,如果 grep 什么也没找到,自然输出将是什么。
【讨论】: