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

Bash 通过读取实用程序将netcat命令的输出传递给变量或管道,bash,netcat,Bash,Netcat,netcat命令的输出nc-dvzw1 8.8.8.8 443在存储在变量中或通过读取实用程序传输时,其行为似乎与其他命令的输出不一样 将nc cmd输出存储到变量cmd_output=$(nc-dvzw1 8.8.8.8 443)会生成一个空变量。在不使用v开关的情况下,结果相同。其他CMD可以存储到变量(ls-a、pwd、date) 通过管道将nc输出传输到读取实用程序,如下所示,不会将任何内容写入文件。在不使用v开关的情况下,结果相同 “while read echo”管道已使用另一个命令

netcat命令的输出
nc-dvzw1 8.8.8.8 443
在存储在变量中或通过读取实用程序传输时,其行为似乎与其他命令的输出不一样

  • 将nc cmd输出存储到变量
    cmd_output=$(nc-dvzw1 8.8.8.8 443)
    会生成一个空变量。在不使用v开关的情况下,结果相同。其他CMD可以存储到变量(ls-a、pwd、date)

  • 通过管道将nc输出传输到读取实用程序,如下所示,不会将任何内容写入文件。在不使用v开关的情况下,结果相同

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


    到8.8.8.8 443端口[tcp/https]的
    连接成功被写入标准错误stderr中。
    $(…)
    命令替换捕获命令的标准输出

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


    如果您只想检查
    nc
    命令是否成功,只需检查它的退出状态,例如使用If
    If nc-dvzw1 8.8.8.8 443 2>/dev/null;然后回声“成功”;否则回声“失败”;fi
    或通过检查
    $?
    连接到8.8.8.8 443端口[tcp/https]成功
    报告成功。它的退出状态为0<代码>nc:连接到8.8.8.8端口443(tcp)超时:操作正在进行报告错误或失败。它的退出状态为1。据我所知,Stderr…用于错误和诊断。它们都是标准的吗?
    nc -dvzw1 8.8.8.8 443 | while read line ; do echo -e "$now $line" ; done >> ~/vpn.log
    
    > nc -dvzw1 8.8.8.8 443
    Connection to 8.8.8.8 443 port [tcp/https] succeeded!