Wie kann man den Effekt von "set -e" rückgängig machen, wodurch bash sofort beendet wird, wenn ein Befehl fehlschlägt?

205

Nach dem Aufrufen set -eeiner interaktiven Bash-Shell wird Bash sofort beendet, wenn ein Befehl mit einem Wert ungleich Null beendet wird. Wie kann ich diesen Effekt rückgängig machen?

Tianyi Cui
quelle

Antworten:

309

Mit set +e. Ja, es ist nach hinten , dass Sie ermöglichen mit Shell - Optionen set -und deaktivieren Sie sie mit set +. Historische Rosinen, Donchanow.

zwol
quelle
Vielen Dank, es gehört zu den letzten Zeilen der entsprechenden Handbuchseite ( faqs.org/docs/bashman/bashref_56.html ), die ich bis zum Ende nicht gelesen habe.
Tianyi Cui
Das Bash-Handbuch ist zwar gewaltig, aber wahr. (Zu Ihrer Information, da Sie neu zu sein scheinen: Es ist das Richtige, auf das Häkchen unter der besten Antwort auf Ihre Frage zu klicken. Dies wird als "Akzeptieren" bezeichnet.)
zwol
12
Leider ist die Unix-Shell-Sprache (von der die meisten nicht spezifisch für 'bash' sind) eine der am wenigsten intern konsistenten Programmiersprachen, die heute noch weit verbreitet sind. Sie werden viel mehr von diesen kleinen Warzen lernen müssen. Und ich würde sagen, das ist dort ein Dokumentationsfehler.
zwol
10
historische Trauben sind die Hölle der Rosinen!
James
2
Schließlich ist ein unfaires Bashing von Bash: Single Dash die Standard-POSIX-Shell-Befehlszeilenoption und daher am natürlichsten für "etwas tun". +ist wie, -aber etwas zu überqueren bedeutet "nicht" wie in "≠".
Ciro Santilli 法轮功 冠状 病 六四 事件 29
68

Es kann unhandlich sein, set +e/ set -ejedes Mal zu verwenden, wenn Sie es überschreiben möchten. Ich habe eine einfachere Lösung gefunden.

Anstatt es so zu machen:

set +e
command_that_might_fail_but_we_want_to_ignore_it
set -e

Sie können es so machen:

command_that_might_fail_but_we_want_to_ignore_it || true

oder, wenn Sie Tastenanschläge speichern möchten und nichts dagegen haben, ein wenig kryptisch zu sein:

command_that_might_fail_but_we_want_to_ignore_it || :

Hoffe das hilft!

szeryf
quelle
11
:Ich habe mich über die Geschichte von gewundert und hier meine Antwort gefunden , falls jemand anderes neugierig ist.
3cheesewheel
4
Dies gilt nur, wenn Sie sich nicht für den Rückkehrcode des von Ihnen ausgeführten Befehls interessieren.
Isaac
20
  • Wenn Sie + anstelle von - verwenden, werden diese Flags deaktiviert.

Quelle

mhitza
quelle