将命令的STDOUT重定向到一个文件并在linux bash中基于它进行决定

gdrx4gfi  于 2023-08-03  发布在  Linux
关注(0)|答案(2)|浏览(95)

我想运行netstat命令并将stderrstdout重定向到一个文本文件,并检查其stdout以获取特定字符串。我不想打开结果文本文件并查找字符串,而是寻找更好的方法。我应该如何在bash脚本中执行此操作?

while true
    netstat -anpt 1>>./log.txt 2>>./log.txt
    if [ $1 | grep -q "631" ]; then
        # whatever to be done
        break
    fi
done

字符串

bxgwgixi

bxgwgixi1#

将stdout发送到log.txt。如果要检查某个字符串的标准输出,可以执行

if grep -q 631 log.txt

字符串
我看不出你为什么不想查看log.txt的原因,因为无论如何你都在创建它,但是如果你真的想避免这种情况,你可以做一个

if netstat -antp 2>log_stderr.txt | tee log_stdout.txt | grep -q 631


这就留下了保存标准错误的log_stdout.txt,保存标准错误的log_stderr.txt,grep在不打开标准输出日志文件的情况下检查模式。
如果您想将stdin和stdout结合起来,当然可以使用

if netstat -antp  2>&1 | tee log.txt | grep -q 631

8xiog9wr

8xiog9wr2#

您可以使用命令替换将输出放在一个变量中,同时还可以使用tee重定向到一个文件。

output=$(netstat -anpt 2>&1 | tee -a ./log.txt)
if [[ "$output" = *631* ]]; then
    # whatever
fi

字符串

相关问题