Per esempio questa linea fallisce:Perché non posso usare Unix Nohup con Bash For-loop?
$ 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?
Per esempio questa linea fallisce:Perché non posso usare Unix Nohup con Bash For-loop?
$ 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?
Perché 'nohup' si aspetta un comando a parola singola e i suoi argomenti - non un costrutto del ciclo di shell. Dovresti usare:
nohup sh -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done >output.txt' &
Scriverà su output.txt per ogni file? Se ci sono informazioni importanti che non vuoi sovrascrivere, userei '>>' invece di '>'. –
Se ho dati importanti in 'output.txt', non eseguirò l'output di un programma anche in modalità append. Vorrei creare un nuovo file, e solo quando ero soddisfatto che i nuovi dati erano ciò che volevo avrei aggiunto al file master. YMMV, ovviamente. –
@ JonathanLeffler che tuttavia non risponde alla domanda. Credo che questo si tronca solo una volta. –
Puoi farlo su una riga, ma potresti volerlo fare 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 &
A meno che 'loopy.sh' sia nel percorso, devi invocarlo come'./Loopy.sh', almeno su questo sistema Red Hat ho appena provato con. – Tshepang
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 &
Il "perché" è che nohup esegue i suoi argomenti con 'execv()' e 'execv()' accetta un vettore di argomento che è passato direttamente al kernel, non andando attraverso qualsiasi shell. Quindi, se vuoi una shell, devi dire nohup di eseguirne una tu stesso. –