对我来说,以下两个bash命令产生不同的结果:
# returns instantly
ssh localhost 'nohup sleep 5 >out 2>&1 &'
# returns after 5 seconds
ssh localhost 'nohup sleep 5 2>&1 >out &'
令人惊讶,因为以下两个bash命令产生相同的结果:
# both return instantly
nohup sleep 5 >out 2>&1 &
nohup sleep 5 2>&1 >out &
为什么?
command >out 2>&1
...取出标准并将其放入文件中。然后,它接受标准错误,并将其放置在与标准错误相同的位置。
两个流发送到一个文件。
此表格:command 2>&1 >out
...接受标准错误,然后将其放到标准输出上。然后,它将取出要发送到标准的内容,并将其发送到文件。它
不
向文件发送标准错误。因此,在您的终端上,您正在后台执行任务,并且提示会立即返回。使用ssh时,在第一种情况下,由于所有内容都已发送到文件,因此没有任何输出可显示。在其他情况下,标准输出仍可以显示应用程序尝试发送到标准错误的信息。我期望在第一种情况下ssh立即返回,因为永远不会有任何输出。在第二种情况下,有一个开放的流可能会返回数据供您查看。