我需要做类似的事情:
while true
do
if ss --tcp --processes | grep 53501 ; then <save result to /tmp/cmd.out> ; fi
done
uj5u.com热心网友回复:
本质上不可能做到这一点,因为命令(或命令管道)在运行时会产生输出,但在完成运行之前不会产生退出状态(成功/失败);因此,在输出完成之前,您无法决定是否保存输出。
您可以做的是将输出临时存盘在某个地方,然后保存或不保存。我不确定这是否正是您想要做的,但可能是这样的(使用变量作为临时存盘):
while true
do
output=$(ss --tcp --processes | grep 53501)
if [ -n "$output" ]; then
echo "$output" >/tmp/cmd.out
fi
done
uj5u.com热心网友回复:
回圈看起来很危险,最终您将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 什么也没找到,自然输出将什么都没有。
0 评论