例如,这行失败:为什么我不能在Bash For-Loop中使用Unix Nohup?
$ nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt&
-bash: syntax error near unexpected token `do
怎样做正确的方式?
例如,这行失败:为什么我不能在Bash For-Loop中使用Unix Nohup?
$ nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt&
-bash: syntax error near unexpected token `do
怎样做正确的方式?
因为'nohup'需要单字命令及其参数 - 而不是shell循环结构。你必须使用:
nohup sh -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done >output.txt' &
这会写在每个文件的output.txt上吗?如果有不重写的重要信息,我会使用'>>'而不是'>'。 – 2015-02-01 12:04:24
如果我在'output.txt'中有重要的数据,即使在追加模式下,我也不会运行程序的输出。我会创建一个新文件,并且只有当我满意新数据是我想要的时候,才会将它附加到主文件中。 YMMV,当然。 – 2015-02-01 14:53:15
@JonathanLeffler虽然没有回答这个问题。我相信这只会截断一次。 – 2017-09-05 16:26:24
你可以在一行上做,但你可能也想明天做。
$ cat loopy.sh
#!/bin/sh
# a line of text describing what this task does
for i in mydir/*.fast ; do
./myscript.sh "$i"
done > output.txt
$ chmod +x loopy.sh
$ nohup loopy.sh &
除非'loopy.sh'在路径中,否则您需要像'。/ loopy.sh'一样调用它,至少在这个Red Hat系统上我只是尝试过用。 – Tshepang 2013-04-29 14:51:50
对于我来说,乔纳森的解决方案不正确地重定向到output.txt。这一个效果更好:
nohup bash -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done' > output.txt &
的“为什么”是的nohup执行它的参数用'execv()'和'execv()'需要它直接传递给内核的参数向量,不会通过任何外壳。因此,如果你想要一个shell,你需要告诉nohup自己执行一个。 – 2014-02-27 19:36:41