web-dev-qa-db-fra.com

Pourquoi ne puis-je pas utiliser UNIX NOHUP avec BASH FOR-BOOP?

Par exemple, cette ligne échoue:

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

Quelle est la bonne façon de le faire?

31
neversaint

Parce que 'nohup' s'attend à une commande à un mot et à ses arguments - pas une construction de boucle de coquille. Vous devrez utiliser:

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

Vous pouvez le faire sur une ligne, mais vous voudrez peut-être le faire demain aussi.

$ 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

Pour moi, la solution de Jonathan ne redirige pas correctement à la sortie.txt. Celui-ci fonctionne mieux:

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

4
Martin