Die echo
Einstellung in den Terminaltreibereinstellungen gibt an, ob der Terminal - Treiber sollte echo die Zeichen wieder angezeigt werden . Anwendungen wie vi
oder moderne Shells verwenden an ihrer Eingabeaufforderung weder das Gerät noch den kanonischen Modus des Terminals . Sie behandeln jeden Tastendruck und geben das von Ihnen eingegebene Echo selbst wieder, indem Sie auf das Terminalgerät schreiben.
Readline und jede Anwendung, die es verwendet, mögen bash
oder gdb
deaktivieren ihr Echo jedoch, wenn sie feststellen, dass das Terminal echo
deaktiviert wurde, andere Shells mögen zsh
oder tcsh
nicht.
Beachten Sie, dass echo
der bash
Shell-Prompt (oder eine moderne Shell mit eigenem Zeileneditor) immer deaktiviert ist, da readline sein eigenes Echo ausführt. bash
/ readline
speichert die Terminaleinstellungen vor jeder Aufforderung und setzt sie auf diejenige, die zur Implementierung des Zeileneditors erforderlich ist (einschließlich Deaktivierung echo
), und setzt sie vor der Ausführung eines Befehls auf den gespeicherten Wert zurück.
Die Ausgabe von stty -a
ist also die gespeicherte Konfiguration. Und bash
/ readline (aber keine anderen Shells) deaktiviert das eigene Echo, wenn echo
es in dieser gespeicherten Konfiguration deaktiviert ist .
Sie erhalten dasselbe Verhalten, das Sie sehen, wenn Sie Folgendes ausgeben:
stty -echo
Anwendungen deaktivieren normalerweise das Echo des Terminals, wenn sie eine Kennwortaufforderung ausgeben, oder wie im Fall von vi
oder bash
darüber, um ihre eigene Textbearbeitung zu implementieren (und sie verwenden nicht den kanonischen Modus des Terminals). Sie stellen die Einstellungen beim Beenden wieder her.
Ein weiterer Unterschied in Ihrem Fall besteht darin, dass icanon
die Option deaktiviert ist. Dies legt nahe, dass wir im zweiten Fall wahrscheinlicher sind.
Ihr Ruby-Skript startet wahrscheinlich eine visuelle Anwendung, die die Terminaleinstellungen nicht richtig zurücksetzt. Dies kann passieren, wenn diese Anwendung mit einem nicht einfangbaren Signal wie SIGKILL beendet wird oder wenn sie noch läuft oder ausgesetzt ist.
Um die Terminaleinstellungen wiederherzustellen, können Sie eine stty sane
oder reset
. Möglicherweise möchten Sie überprüfen, ob noch ein Prozess ausgeführt wird und welche Anwendung das Skript ausführt und warum es nicht ordnungsgemäß funktioniert.