Pourquoi ne puis-je pas utiliser Unix Nohup avec Bash-boucle?
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?
- Le "pourquoi", c'est que nohup exécute ses arguments avec
execv()
, etexecv()
prend un argument vecteur, qui est passé directement au noyau, de ne pas passer par un shell. Ainsi, si vous voulez un shell, vous devez dire à nohup pour exécuter un vous-même.
Vous devez vous connecter pour publier un commentaire.
Parce que "nohup' attend un unique mot de commande et ses arguments - pas une boucle shell de construire. Vous auriez à utiliser:
>>
au lieu de>
.output.txt
, je ne serait pas la sortie d'un programme, même en mode ajout. Je voudrais créer un nouveau fichier, et seulement quand j'ai été convaincu que les nouvelles données était ce que je voulais aurais-je l'ajouter dans le fichier principal. YMMV, bien sûr.Vous pouvez le faire sur une seule ligne, mais vous pourriez le faire demain aussi.
loopy.sh
est dans le chemin, vous avez besoin de l'invoquer comme./loopy.sh
, au moins sur ce Red Hat system, j'ai juste essayé avec.Pour moi, Jonathan solution n'est pas redirigée correctement output.txt. Celui-ci fonctionne mieux:
nohup bash -c 'for i in mydir/*.fasta; do ./myscript.sh "$i"; done' > output.txt &
Vous pouvez aussi l'écrire comme