yae*_*ael 4 ssh io-redirection perl shell-script
我从我的 bash 脚本运行以下行,以便在远程机器上运行脚本 /usr/run.pl
xargs -P "$numprocs" -I '{}' -n 1 -- perl -e 'alarm shift; exec @ARGV' -- "$timeout" ssh -nxaq -o ConnectTimeout=5 -o StrictHostKeyChecking=no '{}' /usr/run.sh < <(echo -e "$node")
Run Code Online (Sandbox Code Playgroud)
但我在控制台上得到以下标准输出
Connection to 143.6.22.4 closed by remote host.
xargs: perl: exited with status 255; aborting
Run Code Online (Sandbox Code Playgroud)
我需要在语法中放置1>/dev/null以避免出现此消息?
一个进程有两种输出流通常会发送到终端:标准输出(绑定到文件描述符 1)和标准错误(绑定到文件描述符 2)。这允许轻松分离捕获预期输出和错误消息或其他通常不期望输出的诊断信息。
当您使用重定向 ( >) 时,它只会将标准输出踢到指定的文件或位置,而不会触及标准错误。这使您可以查看是否有错误(如您所见)。
如果要发送所有输出,包括标准错误,则需要重定向两个流:
/path/to/program arg1 arg2 > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
或者,或者更明确地说:
/path/to/program arg1 arg2 > /dev/null 2> /dev/null
Run Code Online (Sandbox Code Playgroud)
语法的2>&1意思是“将当前输出到文件描述符 2 的输出发送到输出到文件描述符 1 的相同位置”。 >省略了 FD1 的默认值,因此它在语义上与 相同1>,这可能2>更有意义。