Au début, c'était un peu drôle, comme jouer à "Bash Roulette" ... mais maintenant ça devient vieux lol
Toute commande dans mon terminal qui se termine avec un code différent de zéro ferme la fenêtre de mon terminal
On m'a dit que j'avais peut-être set -e
mis dans un script bash quelque part que mes sources terminales.
J'ai vérifié .bash_profile
/ .bashrc
/ .profile
et il ne semble pas set -e
y être.
Y aurait-il d'autres coupables évidents?
bash
shell-script
terminal
bashrc
Alexander Mills
la source
la source
set +e
, cela résout-il le problème? Si oui, ce que je suppose, alors vous devez continuer à chercher celaset -e
. Il pourrait être dans les versions globales de ces fichiers sous/etc
, ou dans tout autre script provenant d'eux. Éloignez vos fichiers de configuration, si le problème est résolu, ajoutez les lignes en petits morceaux pour voir où il se casse.PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap
pourrait être informatif.-
comme ceci:echo $-
.Réponses:
Très bien, donc en effet, c'était une capricieuse
set -e
qui a causé mon problème.La façon dont je trouve l'
set -e
utilisaitbash -lx
La meilleure chose à faire serait d'utiliser:
bash -lx > lx.log 2>&1
puis ouvrez ce fichier journal et effectuez une recherche pour
set
...une fois que vous trouvez que capricieux,
set -e
vous pouvez supprimer cette ligne et votre problème devrait avoir disparu! (Le redémarrage de la machine peut être une bonne idée).Dans mon cas, le
set -e
fichier se trouvait dans un fichier contenant les sources de .bash_profile, mais la ligne n'était pas dans le fichier .bash_profile lui-même.la source
source
dans votre shell sont un ensemble beaucoup plus petit que les "scripts shell aléatoires".-e
peut être utile dans des scripts réels, pour une vérification d'erreur stupide. (Ou pour vous assurer que vous n'avez rien oublié de vérifier les erreurs.)global set -e
ça quiset -e
n'affecte que le script contenant$-
pour vérifier l'indicateur dans le script interne et restaurer son état à la fin, ou simplement le réinitialiser dans le script principal si vous savez que vous avez trouvé des scripts qui le définiraientlocal set -e
ne pourrait être utilisé que dans une fonction bash?Si vous voulez simplement résoudre le problème, incluez-le
set +e
dans votre.bashrc
- à la fin.Vous pouvez aller creuser - il y a beaucoup d'autres endroits où il
set -e
pourrait y en avoir - mais cela s'occupera du lot.Si, cependant, cela
set -e
fait partie de votre,$PROMPT_COMMAND
alors ce qui précède ne fonctionnera pas. Essayez deprintf '%s\n' "$PROMPT_COMMAND"
voir ce qu'il contient.la source
printf '%s\n' "$PROMPT_COMMAND"
produit que des espaces, rien là$PROMPT_COMMAND
est de mettre à jour le nom de l'onglet du terminal ou le nom de la fenêtre; MacOS X et Ubuntu le font tous les deux. Voir apple.stackexchange.com/q/220641/151730 pour les données à ce sujet pour Mac.set +e
n'a pas fonctionné, peut-être parce que c'était avant l'set -e
appel dans mes fichiers bash d'origine.set +e
à la vôtre.bashrc
, pas le mettre au début. Je l'ai expliqué dans ma réponse maintenant. Heureusement que vous avez trouvé la source!set +e
c'est juste un pansement, évidemment, mais vous avez dit que