`nohup` 不能与 `&&` 一起正常工作

Geo*_*e Y 0 nohup

我想要延迟后台执行,对于我sleep [anyseconds] && [execution]使用的后台延迟nohup

单独的简单例子nohup

nohup date &>> out.log &

当然,您可以找到datein执行的打印结果out.log

但我想延迟执行,比如15秒,所以有点组合:

nohup sleep 15 && date &>> out.log &

这次它无法正常工作,sleep 15被执行,而date并不总是如此 - 如果您关闭终端,它不会在&&.

出什么问题了nohup?它屈服于&&??

Mar*_*rco 5

我假设你在 bash 中,其中nohup有系统命令(coreutils)。

在 bash 中&&标记命令行的结束。在您的情况下,nohup仅从 shell 获取参数sleep 15。剩下的就是 shell 的下一个命令。

由于nohup它不是 shell,因此不能使用括号将参数“扩展”为nohup,因为nohup无法解释它并且不知道如何处理它。

一种解决方案是创建一个脚本(例如sleepdate),其中包含sleep 15 && date并将其用作参数nohup

nohup ./sleepdate &>> out.log &
Run Code Online (Sandbox Code Playgroud)

或使用 bash (可以解释&&)作为参数nohup

nohup bash -c 'sleep 15 && date' &>> out.log &
Run Code Online (Sandbox Code Playgroud)