web-dev-qa-db-ja.com

Bash ForループでUnix Nohupを使用できないのはなぜですか?

たとえば、次の行は失敗します。

$ Nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt&
-bash: syntax error near unexpected token `do

それを行う正しい方法は何ですか?

31
neversaint

「Nohup」は、Shellループ構成ではなく、単一のWordコマンドとその引数を想定しているためです。あなたが使用する必要があります:

Nohup sh -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done >output.txt' &
71

1行で実行できますが、明日も実行することができます。

$ 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 &
9
msw

私にとって、Jonathanのソリューションはoutput.txtに正しくリダイレ​​クトされません。これはうまくいきます:

Nohup bash -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done' > output.txt &

4
Martin