Perché non è possibile utilizzare Unix nohup con Bash Per-ciclo?
Domanda
Ad esempio questa riga non riesce:
$ nohup for i in mydir/*.fasta; do ./myscript.sh "$i"; done > output.txt&
-bash: syntax error near unexpected token `do
Qual è il modo giusto per farlo?
Soluzione
Poiché 'nohup' attende un comando singolo parola e suoi argomenti - non un costrutto di ciclo shell. Dovreste usare:
nohup sh -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done >output.txt' &
Altri suggerimenti
È possibile farlo su una sola riga, ma si potrebbe desiderare di farlo anche domani.
$ 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 &
Per me, la soluzione di Jonathan non reindirizza correttamente output.txt. Questo funziona meglio:
nohup bash -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done' > output.txt &
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow