Anfangs war das ein bisschen lustig, als würde man "Bash Roulette" spielen ... aber jetzt wird es alt, lol
Jeder Befehl in meinem Terminal, der mit einem Code ungleich Null beendet wird, schließt mein Terminalfenster
Mir wurde gesagt, dass ich vielleicht set -e
irgendwo ein Bash-Skript eingestellt habe, das mein Terminal bereitstellt.
Ich habe überprüft .bash_profile
/ .bashrc
/ .profile
und es sieht nicht so set -e
drin ist.
Gibt es noch andere offensichtliche Schuldige?
bash
shell-script
terminal
bashrc
Alexander Mills
quelle
quelle
set +e
, repariert es das Problem? Wenn ja, was ich vermute, dann müssen Sie weiter suchenset -e
. Dies kann in den globalen Versionen dieser Dateien unter/etc
oder in einem anderen Skript geschehen, das von ihnen stammt. Verschieben Sie Ihre Konfigurationsdateien weg. Wenn das Problem behoben ist, fügen Sie die Zeilen in kleineren Blöcken wieder hinzu, um zu sehen, wo sie brechen.PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trap
könnte informativ sein.-
wie folgt:echo $-
.Antworten:
Okay, es war in der Tat ein Irrweg
set -e
, der meine Probleme verursacht hat.Die Art und Weise, wie ich sie fand,
set -e
wurde benutztbash -lx
Am besten verwenden Sie:
bash -lx > lx.log 2>&1
dann öffne diese Logdatei und suche nach
set
...Wenn
set -e
Sie diesen Fehler gefunden haben , können Sie diese Zeile entfernen und Ihr Problem sollte behoben sein! (Ein Neustart der Maschine ist empfehlenswert).In meinem Fall befand sich das
set -e
in einer Datei, die von .bash_profile erstellt wurde, aber die Zeile befand sich nicht in .bash_profile.quelle
source
in Ihrer Shell sicher sind, sind viel kleiner als nur "zufällige Shell-Skripte".-e
kann in tatsächlichen Skripten nützlich sein, um dumme Fehler zu überprüfen. (Oder um sicherzugehen, dass Sie nicht vergessen haben , irgendetwas zu überprüfen.)global set -e
, dasset -e
nur das enthaltene Drehbuch betrifft$-
für die Flagge im inneren Skript zu prüfen und seinen Zustand am Ende wieder herzustellen, oder es nur am Haupt Skript zurückgesetzt , wenn Sie wissen , Sie haben Skripte stammen , die es setzen würdenlocal set -e
es nur in einer Bash-Funktion verwendet werden kann?Wenn Sie das Problem nur lösen möchten, fügen
set +e
Sie.bashrc
am Ende Ihr - hinzu .Sie können graben gehen - es gibt viele andere Orte, an denen sich ein befinden
set -e
könnte -, aber das kümmert sich um das Los.Wenn dies jedoch
set -e
Teil Ihres$PROMPT_COMMAND
ist, funktioniert das oben Genannte nicht. Probierenprintf '%s\n' "$PROMPT_COMMAND"
Sie aus, was drin ist.quelle
printf '%s\n' "$PROMPT_COMMAND"
nur Leerzeichen ausgegeben, nichts$PROMPT_COMMAND
ist das Aktualisieren des Registerkartennamens oder Fensternamens des Terminals. MacOS X und Ubuntu tun dies beide. Informationen dazu für Mac finden Sie unter apple.stackexchange.com/q/220641/151730 .set +e
, die möglicherweise nicht funktionierte, weil sie vor demset -e
Anruf in meinen Bash-Dateien gespeichert war.set +e
.bashrc
set +e
ist natürlich nur ein Pflaster, aber Sie haben gesagt, dass