Entfernen Sie ^ C, wenn Sie STRG + C drücken

25

Gibt es in Red Hat Enterprise Linux 6 ("Santiago") eine Möglichkeit zum Entfernen, ^Cwenn Sie CTRL+ Cin das Shell-Include drücken? Ich habe die Erlaubnis, meine eigenen zu bearbeiten .bash_profile.

Fede Gold
quelle
4
tryset echo-control-characters off
Sundeep
1
Ich habe es versucht, aber es hat nicht funktioniert
Fede Gold

Antworten:

29

Bearbeiten (oder erstellen) Sie Ihre ~/.inputrcDatei. Fügen Sie eine Zeile hinzu, in der es heißt

set echo-control-characters Off

Dadurch wird die GNU Readline-Bibliothek (die Bash verwendet) angewiesen, keine Steuerzeichen auf dem Bildschirm auszugeben (zurückzugeben). Die Einstellung ist danach in allen neuen Bash-Sitzungen (und in jedem anderen Dienstprogramm, das die Readline-Bibliothek verwendet) aktiv.

Beachten Sie, dass Ihre persönliche Konfigurationsdatei diese Datei enthalten muss , wenn Ihr Unix-System (normalerweise /etc/inputrc) eine systemweite Konfigurationsdatei für die Readline-Bibliothek enthält:

$include /etc/inputrc
set echo-control-characters Off

Eine andere Alternative besteht darin, eine persönliche Kopie der systemweiten Konfigurationsdatei zu erstellen und diese anschließend zu ändern.

Kusalananda
quelle
Hallo, ich habe das getestet und es funktioniert einwandfrei, aber wenn ich einen laufenden Bash-Befehl unterbreche, hat es zum Beispiel nicht funktioniert sleep 180und drücke STRG + C
rɑːdʒɑ
@ Ten-Coin Funktioniert nur, wenn der Befehl leider die Readline-Bibliothek verwendet.
Kusalananda
1
Wenn ~/.inputrcdies noch nicht der Fall ist, können beim Erstellen der Datei möglicherweise einige vorhandene Einstellungen verloren gehen. In meinem Fall ist mir zum ersten Mal aufgefallen, dass Strg + Links und Strg + Rechts nicht mehr funktionieren. Die Lösung bestand darin, ~/.inputrcmit dieser Zeile zu beginnen $include /etc/inputrc. Es ist auch möglich, einfach cp /etc/inputrc .inputrcund nach Wunsch zu bearbeiten.
Kasperd
2
@kasperd Guter Punkt! Mir war nicht bewusst, dass das Hinzufügen einer persönlichen Konfigurationsdatei das Lesen der systemweiten Konfigurationsdatei verhindern würde (mein System hat keine). Ich werde meine Antwort aktualisieren.
Kusalananda
20

Versuche Folgendes:

stty -echoctl

Eine Erklärung finden Sie in diesem großartigen und detaillierten Beitrag von Stéphane Chazelas, in dem auch einige andere sttyFunktionen erläutert werden .

Wenn Sie diese Änderung dauerhaft machen möchten (und Sie verwenden, bashwie in Ihrer Frage impliziert), ist es am besten, sie .bashrcwie von jlmg in den Kommentaren vermerkt einzutragen (dies gilt also für alle interaktiven Shells).

phk
quelle
+1 Im Gegensatz zur readline-Lösung sollte dies für die meisten, wenn nicht alle Dinge funktionieren, die im Terminal ausgeführt werden.
JoL
1
Man sollte wahrscheinlich erwähnen, dass es nicht auf allen Terminals funktioniert, wenn es eingegeben wird, .bash_profileda diese Datei nur von Login-Shells analysiert wird. Es sollte stattdessen eingefügt .bashrcwerden, damit es von allen interaktiven Aufrufen gelesen wird.
JoL
1
Wird dies nicht immer noch das rohe 0x03-Byte wiedergeben, das theoretisch von einigen Terminals interpretiert werden kann? Es hat auch Nebenwirkungen, wenn Sie beispielsweise einen Befehl ^[[A
ausführen,
1
@ Random832 +1 Du hast recht. Ich denke, dass die Einstellung nur einen falschen Namen hat. Es steuert nicht das Echo von Steuerzeichen, sondern deren Übersetzung in druckbare Zeichen vor dem Echo. Um diese Nebenwirkung zu vermeiden, müssten Sie stty -echoauch. Das wird natürlich auch das Echo von allem anderen verhindern, was diese Antwort wahrscheinlich zu einem No-Go macht, wenn Sie nur das ^Cs verstecken wollten .
JoL
1
@jlmg Wenn das ^Cimmer am Ende war könnte ich dir zustimmen. Aber das ^Cwird gedruckt, wo immer sich der Cursor befand, wodurch ein Zeichenpaar an einer beliebigen Stelle im Befehl überschrieben werden kann. Das heißt, wenn Sie Teile dieses Befehls kopieren und einfügen müssen, wird möglicherweise etwas beschädigt. Und das ^Cist beim Blick über das Terminal nicht so leicht zu erkennen wie am Ende des Befehls.
Kasperd
2

Wenn Sie versuchen, eine Konfiguration zu finden, die normales Echo (einschließlich echoctl) ermöglicht und nur das Echo signalerzeugender Zeichen stummschaltet, und Sie sicher sind, dass dies möglich sein sollte, da Sie zuvor gesehen haben, dass es so funktioniert ...

Sie haben es wahrscheinlich so gesehen. Aber es ist nicht mehr möglich, wegen dieses Commits :

Festschreiben von ec5b1157f8e819c72fc93aa6d2d5117c08cdc961

Aktivieren Sie das Echo INTR / QUIT / SUSP in der Zeilendisziplin N_TTY (z. B. wird Strg-C als "^ C" angezeigt, wenn Stty-Echoctl und Strg-C als INTR festgelegt sind).

Linux scheint das einzige Unix-ähnliche Betriebssystem zu sein (das ich kürzlich unter Solaris, BSD und Mac OS X überprüft habe), das sich nicht so verhält, und ich vermisse es wirklich als eine gute visuelle Bestätigung der Unterbrechung eines Programms in der Konsole oder xterm. Ich erinnere mich gerne an viele Unixe, die ich im Laufe der Jahre auch verwendet habe. Es scheint auch eine gute Möglichkeit zu sein, dies auf Linux zu bringen, um die Kompatibilität mit standardmäßigen Unix-Verhaltensweisen zu verbessern.

Wenn Sie sich noch genau daran erinnern, wie Linux das nicht wiederholt hat, ^Ckönnen Sie das alte Verhalten nur wiederherstellen, indem Sie Ihren Kernel patchen. In neueren Versionen wird das Echo signalerzeugender Zeichen in den Zeilen 1215-1218 von drivers / tty / n_tty.c ausgegeben .


quelle