2010-10-08 3 views
0

J'ai un script bash avec un code comme ceci:boucle de Bash se termine en boucle de façon inattendue sans montrer pourquoi

echo "EXECUTING TASK 1" 
sort -r scripts/sh/test-list | while read fn; do  
    sh -vx scripts/sh/test-web-task.sh "$fn" 
done 

echo "EXECUTING TASK 2" 
sort -r scripts/sh/test-unit-list | while read fn; do 
    sh -vx scripts/sh/test-unit-task.sh "$fn" 
done 

Dans le test-web-tâche et test unité tâche que j'ai quelques appels à Grails pour exécuter certains tests et ensuite faire des trucs d'emballage. Quelque chose comme ceci:

grails test-app $1 
mv results backup/$1 

Dans les fichiers scripts/sh/test-unité liste et scripts/sh/liste de test J'ai une liste des tests à exécuter. Quelque chose comme ceci:

Person 
Book 

La première boucle se brise sans courir toutes les lignes des scripts de fichiers/sh/test-liste et il commence à courir la deuxième boucle.

Comme vous pouvez le voir, j'ai ajouté -vx à sh pour voir quel pourrait être le problème. Mais je ne peux pas trouver ce que je fais mal.

Je pense que peut-être quelque chose dans scripts/sh/test-list se bloque, et briser la boucle. Si c'est le cas, je veux savoir ce qui se bloque, et je veux que la boucle continue sans interruption.

Pouvez-vous me donner un pointeur?

+0

Avez-vous vérifié que la sortie de sort -r scripts/sh/test-list est? Vous pouvez peut-être remplacer sh -vx scripts/sh/test-web-task.sh par echo et voir si la sortie est la même que sort -r scripts/sh/test-list. –

+0

Désolé de ne pas le dire, j'ai fait ce test. Avec l'écho fonctionne bien. – user2427

Répondre

0
sh -vx scripts/sh/test-web-task.sh "$fn" < /dev/null 

Le deuxième script stocke probablement les stdout et stdin du script d'origine. Faites-moi savoir si cela le corrige

+0

Désolé, je ne comprends pas. Proposez-vous de remplacer sh -vx scripts/sh/test-web-task.sh "$ fn" avec des scripts sh -vx/sh/test-web-task.sh "fn $" user2427

+0

le deuxième script que vous exécutez à partir de votre script principal est le vol stdin et stdout. Puisque le second script se termine bien après sa première exécution, il quittera le script principal et ne montrera donc aucune erreur. Je vais essayer de trouver le site que j'ai lu à ce sujet et ajouter un autre commentaire. – mezzie

+0

Cela fonctionne parfaitement. J'avais remplacé comme je l'ai demandé dans l'autre commentaire et fonctionne. Merci – user2427

Questions connexes