`nohup` 与 `&&` 无法正常工作

`nohup` 与 `&&` 无法正常工作

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

单独的简单示例nohup

nohup date &>> out.log &

当然,您可以date在中找到执行结果的打印输出out.log

但我想延迟执行,比如15秒,所以需要进行一些组合:

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

这次它不能正常工作,sleep 15而 并不总是date能执行 - 如果你关闭终端, 之后它将不会执行任何操作&&

有什么问题nohup? 它屈服于&&??

答案1

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

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

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

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

nohup ./sleepdate &>> out.log &

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

nohup bash -c 'sleep 15 && date' &>> out.log &

相关内容