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

时间:2019-04-28 11:19:07

标签: bash netcat

netcat命令nc - dvzw1 8.8.8.8 443的输出在存储在变量中或通过read实用程序存储时似乎不会像其他命令的输出那样正常工作。

  1. 将nc cmd输出存储到变量cmd_output=$(nc -dvzw1 8.8.8.8 443)会生成一个空变量。没有v开关的结果相同。可以将其他cmd存储到变量(ls -a,pwd,日期)。

  2. 按如下所示将nc输出插入到read实用程序中,不会将任何内容写入文件。没有v开关的结果相同。

nc -dvzw1 8.8.8.8 443 | while read line ; do echo -e "$now $line" ; done >> ~/vpn.log

“ while read echo”管道已与另一个命令一起使用。我还可以将nc命令输出直接重定向到文件(即:无需管道传输到“ while read echo”)。

1 个答案:

答案 0 :(得分: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或检查$?