nohup是否在管道上工作?

Jas*_*nes 25 linux bash

如果我做

nohup cmd1 | cmd2 &
Run Code Online (Sandbox Code Playgroud)

是这样的

nohup "cmd1 | cmd2" &
Run Code Online (Sandbox Code Playgroud)

?

我想要nohup一切,就像cmd1在8023端口上听一样.

Wol*_*lph 49

不,您需要单独将nohup添加到命令中.

建议这样的东西:

nohup sh -c "cmd1 | cmd2" &
Run Code Online (Sandbox Code Playgroud)

或者:

nohup $SHELL <<EOF &
cmd1 | cmd2
EOF
Run Code Online (Sandbox Code Playgroud)

  • `$SHELL` 包含您当前运行的 shell,在大多数 Linux 系统上,这将是 `/bin/bash` 但也可能是 `/usr/bin/zsh` 或其他内容。使用 `$SHELL` 变量的优点是,这样命令将使用常规 shell 设置执行。 (2认同)
  • @RoVo 我想我可能将原始答案的 `&amp;` 放在错误的位置,请尝试更新的答案:) (2认同)

Pol*_*k-Z 12

作为替代nohup,我建议

( cmd1 | cmd2 ) > logfile < /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

通过从终端重新路由stdin,stdout和sterr,这实现了与nohup相同的效果,其语法至少我更喜欢.

  • 这并不像'nohup`那样保护命令免受HUP信号的影响.你需要`(陷阱""HUP; cmd1 | cmd2)</ dev/null> logfile 2>&1&`来做到这一点. (8认同)
  • 是的,但正如所写,它确实阻止了关闭终端首先将HUP发送到进程. (3认同)