Ctrl D beendet bash nicht nach bashrc

443
MayeulC

Das bashrcwurde nicht von mir geschrieben und enthält viele verschiedene Konfigurationsdateien. Beim Einkauf kann ich bash nicht mehr mit Ctrl+ Dbeenden.

Ich habe diese verwandte Frage zu zsh gefunden, und ich würde gerne wissen, mit welchem ​​Mechanismus dasselbe mit bash gemacht wird.

Wenn Sie Ctrl+ Din einer Login-Shell eingeben, erhalte ich Folgendes:

Verwenden Sie "Logout", um die Shell zu verlassen.

Wenn Sie sich in einer Shell ohne Login befinden,

Verwenden Sie "exit", um die Shell zu verlassen.

Da diese Meldungen je nach verwendetem Gebietsschema übersetzt werden, handelt es sich wahrscheinlich nicht um ein Systemskript. Ich möchte beide nach Möglichkeit unabhängig voneinander steuern (z. B. diese Funktion für Nicht-Login-Shells deaktivieren). Ist das möglich?

1
Sollte diese Frage stattdessen auf Unix & Linux verschoben werden? Die Regeln von SU sind mir nicht besonders vertraut. MayeulC vor 6 Jahren 0

1 Antwort auf die Frage

3
ischeriad

Schauen Sie sich Ihre Konfiguration an, wenn entweder bash-Variablen oder Shell-Optionen gesetzt sind:

Bash-Variablen

( Abschnitt 5.2 im Bash-Referenzhandbuch)

IGNOREEOF

Steuert die Aktion der Shell bei Erhalt eines EOF-Zeichens als einzige Eingabe. Wenn festgelegt, gibt der Wert die Anzahl aufeinanderfolgender EOF-Zeichen an, die als erstes Zeichen in einer Eingabezeile gelesen werden können, bevor die Shell beendet wird. Wenn die Variable zwar existiert, aber keinen numerischen Wert hat (oder keinen Wert hat), ist der Standardwert 10 . Wenn die Variable nicht vorhanden ist, gibt EOF das Ende der Eingabe an die Shell an. Dies gilt nur für interaktive Shells.

Zum Beispiel IGNOREEOF=2


Ändern des Shell-Verhaltens: Das Set-Builtin

set Damit können Sie die Werte von Shell-Optionen ändern

( Abschnitt 4.3.1 im Bash-Referenzhandbuch)

-o ignoreeof

Eine interaktive Shell wird beim Lesen von EOF nicht beendet.


Ihre Frage beantworten

Ich möchte beide nach Möglichkeit unabhängig voneinander steuern (z. B. diese Funktion für Nicht-Login-Shells deaktivieren). Ist das möglich?

Ja. Von Ihnen gelieferte Skripts sollten prüfen, ob es sich bei der Shell um eine Login-Shell handelt, und die Variable entsprechend festlegen.

if shopt -q login_shell; then IGNOREEOF=10; else IGNOREEOF=0; fi 

Beachten 10Sie, dass Sie den Wert von still immer noch mit Ctrl+ verlassen können D. Sie brauchen nur 11 aufeinanderfolgende Schläge.

Perfekte Antwort. Ich füge nur hinzu, dass Optionen grundsätzlich über `shopt` abgefragt werden können:` shopt -o ignoreeof`. Es scheint so, als würden alle "set -o ignoreeof" und "set + o ignoreeof" "IGNOREEOF = 10" und "unset IGNOREEOF" tun. MayeulC vor 6 Jahren 0