2014-07-23 6 views
2

Dans un script bash, je démarre un nouveau terminal avec une commande qui donne une erreur. Cependant, je ne semble pas être en mesure de saisir ce code d'erreur:BASH obtenir le code d'erreur dans le terminal parent du terminal enfant?

#! /bin/bash 
gnome-terminal -x bash -c "cat dksdamfasdlm" 
echo $? 

Sortie:

0 

J'obtenir le code d'erreur de la commande gnome-terminal au lieu du cat un. Une suggestion que j'ai eue, était de faire un fichier avec le code et lire cela à partir du parent bash. Le problème est que je semble encore ne pas être en mesure et lire le code d'erreur, même de cette façon:

#! /bin/bash 
gnome-terminal -x bash -c "cat dksdamfasdlm; echo $?; sleep 2" 

sortie (sur le nouveau terminal):

cat: dksdamfasdlm: No such file or directory 
0 

Pourquoi? Une suggestion sur la façon de résoudre cela? Je veux juste attraper l'erreur dans le nouveau terminal du bash parent.

+0

Pourquoi voudriez-vous faire cela? À moins de tester le terminal GNOME lui-même, vous devriez exécuter le script directement plutôt que via un terminal. – l0b0

+0

J'essaye de faire un script BASH qui ouvre différents terminaux pour une application (Docker). Je veux cependant être capable et attraper toutes les erreurs .. – Pithikos

+0

Pourriez-vous donner un peu plus d'arrière-plan? Je ne comprends toujours pas pourquoi vous voulez utiliser des terminaux plutôt que de simplement exécuter des scripts. – l0b0

Répondre

1

Il semble GNOME Terminal quitte immédiatement après le démarrage, ce qui est évident si vous exécutez par exemple gnome-terminal -x sleep 10. Comme il n'attend pas la fin de la commande, il n'y a aucun moyen que le code de retour soit celui de la commande. Je ne pouvais trouver aucune option dans gnome-terminal --help-all pour garder le processus au premier plan.

En ce qui concerne votre deuxième question, vous avez double- quoted la commande, si $? est dilatée avant l'exécuter. Cela devrait fonctionner:

gnome-terminal -x bash -c 'cat dksdamfasdlm; echo $?; sleep 2' 

PS: L'option -x est pas documentée dans GNOME Terminal 3.8.4 de gnome-terminal --help-all, variousreferences ne contribuent pas beaucoup, et il n'y a pas de bonne explication pourquoi il y a une option -e avec une sémantique identique et syntaxe différente.

Questions connexes