/ / Utilisation de nohup dans la boucle d’un script bash - bash, shell, boucles, unix, nohup

Utilisation de nohup dans une boucle d'un script bash - bash, shell, boucles, unix, nohup

J'ai un script bash qui contient une boucle sur une liste de sous-répertoires. Dans la boucle je cd dans chaque sous-répertoire, lancez une commande en utilisant nohup et alors cd reculer. Dans l'exemple suivant, j'ai remplacé l'exécutable par un echo commande pour la simplicité.

#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in $dList; do
cd $d
nohup echo $d &
cd ..
done

Ce qui précède provoque le blocage de nohup lors de la première boucle avec la sortie suivante:

$ ./script.sh
./dname1
$ nohup: appending output to `nohup.out"

Le script ne continue pas dans la boucle et pour taper à nouveau sur la ligne de commande, il faut appuyer sur la touche Entrée. Ok c'est normal nohup comportement lorsqu’on l’utilise sur le shell, mais évidemment cela ne fonctionne pas pour mon script. Comment puis-je obtenir nohup exécuter simplement et ensuite permettre au script de continuer?

J'ai déjà (sans succès) essayé des variantes de la commande nohup, y compris

nohup echo $d < /dev/null &

mais cela n'a pas aidé. De plus, j'ai essayé d'inclure

trap "" HUP

en haut du script aussi, mais cela n'a pas aidé non plus. S'il vous plaît aider!

EDIT: Comme @anubhava l'a correctement souligné, ma boucle contenait une erreur qui faisait que le script n'utilisait que la première entrée du tableau. Voici la version corrigée.

#!/bin/bash
dList=("dname1" "dname2" "dname3")
for d in ${dList[@]}; do
cd $d
nohup echo $d &
cd ..
done

Alors maintenant, le script réalise ce que je voulais. Cependant, nous obtenons toujours la sortie ennuyeuse de nohup, ce qui faisait partie de ma question initiale.

Réponses:

5 pour la réponse № 1

Le problème est ici:

for d in $dList; do

Cela ne fonctionnera que for boucle une fois pour le 1er élément du tableau.

Pour parcourir un tableau, utilisez:

for d in ${dList[@]}; do

Script de travail complet:

dList=("dname1" "dname2" "dname3")
for d in "${dList[@]}"; do
cd "$d"
{ nohup echo "$d" & cd -; } 2>/dev/null
done