通过读取实用程序将netcat命令的输出传递给变量或管道

问题描述 投票:1回答:1

netcat命令nc - dvzw1 8.8.8.8 443的输出似乎表现不像其他命令的输出在存储在变量中或通过read实用程序传输时可预测的工作方式。

  1. 将nc cmd输出存储到变量cmd_output=$(nc -dvzw1 8.8.8.8 443)会产生一个空变量。没有v开关的结果相同。其他cmds可以存储到变量(ls -a,pwd,date)。
  2. 如下所示将nc输出管道连接到读取实用程序不会向文件写入任何内容。没有v开关的结果相同。
nc -dvzw1 8.8.8.8 443 | while read line ; do echo -e "$now $line" ; done >> ~/vpn.log

'while read echo'管道已经使用了另一个命令。我还可以将nc命令输出直接重定向到文件(即:没有管道到'读取回显')。

bash netcat
1个回答
2
投票
> nc -dvzw1 8.8.8.8 443
Connection to 8.8.8.8 443 port [tcp/https] succeeded!

Connection to 8.8.8.8 443 port [tcp/https] succeeded!写入stderr,标准错误。 $( ... )命令替换捕获命令的标准输出。

你可以前。将标准错误重定向到标准输出:nc -dvzw1 8.8.8.8 443 2>&1

如果您只想检查nc命令是否成功,只需检查它的退出状态,例如。使用if if nc -dvzw1 8.8.8.8 443 2>/dev/null; then echo "Succeeded"; else echo "failed"; fi或检查$?

© www.soinside.com 2019 - 2024. All rights reserved.