尝试设置 nohup shell 循环时出现语法错误

尝试设置 nohup shell 循环时出现语法错误

下面的“do”有什么问题:

nohup while true; do ./mysync.sh; sleep 1800; done &

不断出现以下语法错误:

sh:语法错误:“do”意外

如果我执行命令时没有诺哈普,它工作正常并且不会产生错误。

答案1

问题:shell 看到单独的命令,例如“nohup while true”和“do ./mysync.sh”和“sleep 1800”和“done &”。
在这里,shell 发现了意外“do”的问题。

解决方案:您必须通过引用或制作一个小的 shell 脚本将命令分组到一个单元中。把这个单元交给 nohup 就可以了。

(方案A)像这样加入命令:
nohup bash -c "while true; do ./mysync.sh; sleep 1800; done &"
(方案B)将命令while true; do ./mysync.sh; sleep 1800; done &放入mywrapper.sh并运行:
nohup mywrapper.sh

答案2

我遇到了同样的问题并尝试了@Prem 的解决方案。我收到权限被拒绝错误。另外,如果您想使用文件中的变量通过 while 循环运行 nohup,则双引号不起作用。它在 shell 环境中查找变量,而不是从文件中查找。后来,我用单引号运行相同的命令,没有错误:

nohup bash -c '同时读取 fvar;执行 bash uniqReads.MT.sh $fvar;完成 < file.txt > file.log &'

相关内容