例如,這行失敗:爲什麼我不能在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