So verhindern Sie, dass ^ C unter Linux auf Strg-C wiedergegeben wird

5

Wenn ich in einem Pseudoterminal (xterm, gnome-terminal, rxvt, text console und SSH) in Karmic Koala Strg- C drücke , wird die Zeichenfolge ^Can das Terminal in Ubuntu Karmic Koala zurückgesendet. Dies ist in Ubuntu Jaunty Jackalope nicht geschehen. Ich möchte das Extra loswerden ^C. Beispiel:

$ cat
foo
foo
^C
$ _

Ich habe das oben genannte durch Eingabe von C , A , T , Eingabe , F , O , O , Eingabe , Strg- C erhalten . Ich möchte das loswerden ^Cund dies für die gleichen Tastendrücke bekommen:

$ cat
foo
foo

$ _

Ich habe die Einstellung versucht stty -echoctl, die das Problem für rxvt und xterm außerhalb von SSH löste, aber es wurde ein einzelnes Zeichen erstellt, HTwenn SSH von einem Ubuntu Hardy-System ausgeführt wurde, und es wurde eine Box mit Unicode 0003anstelle des ^Cin gnome-Terminals erstellt. Ich möchte absolut nichts sehen, wenn ich Strg- C drücke . Ich benutze

Linux linux 2.6.31-20-generic-pae #57-Ubuntu SMP Mon Feb 8 10:23:59 UTC 2010 i686 GNU/Linux

Ich habe diese Terminaleinstellungen in allen Systemen und allen Terminalemulatoren:

ioctl(0, TCGETS, {c_iflags=0x2502, c_oflags=0x5, c_cflags=0xbf, c_lflags=0x8a3b, c_line=0, c_cc="\x03\x1c\x7f\x15\x04\x00\x01\x00\x11\x13\x1a\x00\x12\x0f\x17\x16\x00\x00\x00"})
pts
quelle
Ja, es ist verwandt, aber es ist kein Duplikat. In meiner Frage ist mir die Eingabeaufforderung (bash oder zsh) egal, aber der catBefehl ist mir wichtig . Die dortige Lösung verbirgt die Escape-Sequenz nicht vor dem catBefehl in gnome-terminal.
pts
Bitte addieren Sie die Ausgabe von stty -a. Ihre ioctl-Daten sind schwer zu lesen (woher kam das übrigens?).
Dennis Williamson
Geschwindigkeit 38400 Baud; Reihen 24; Spalten 80; line = 0; intr = ^ C; quit = ^ \; Löschen = ^ ?; kill = ^ U; eof = ^ D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^ Q; stop = ^ S; susp = ^ Z; rprnt = ^ R; werase = ^ W; lnext = ^ V; Flush = ^ O; min = 1; Zeit = 0; -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnlixon -ixoff -iuclc -ixany -imaxbel iutf8 opost -olccr -crnlcrnl onlret -ofill -ofdel NL0 cr0 tab0 BS0 vt0 ff0 isig icanon iexten Echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
pts
Warum es loswerden? Es muss so sein :-( Es war schon immer so.
nisc

Antworten:

8

Tun Sie dies und zeichnen Sie die Ergebnisse auf:

stty -a

Dann versuche es:

stty sane
stty -echoctl

Wenn Strg-C dann so funktioniert, wie Sie es erwarten:

stty -a

und vergleichen Sie die Ergebnisse mit denen, die Sie oben aufgezeichnet haben.

Bearbeiten:

Dies wurde als Bug gegen das Gnome-Terminal abgelegt . Sie können ein ähnliches Verhalten mit erzeugen printf '\003\n'. PuTTY und xterm zeigen eine leere Zeile an, aber das Gnome-Terminal zeigt eine Unicode-Box an.

Dennis Williamson
quelle
stty sane; stty -echoctlScheint für xterm und rxvt zu funktionieren, aber ich bekomme immer noch das 0003-Zeichen im Gnome-Terminal, und ich bekomme immer noch das HT-Zeichen, wenn ich von einem Ubuntu Hardy ... Ubuntu Jaunty-System auf dieses System ssh. Ich kann Ihre Lösung also nicht akzeptieren.
Pkt.
@pts: interessant. Diese Lösung funktioniert mit Ihrem Katzen-Beispiel unter Ubuntu 10.04 innerhalb einer Bildschirmsitzung in einem Gnome-Terminal, aber nicht im nackten Gnome-Terminal (ich erhalte das Unicode 0003-Zeichen). kein Unterschied in der Stty -a ; Der einzige Unterschied ist der TERM-Wert ( xterm für das Bare-Gnome-Terminal; Bildschirm innerhalb der Bildschirmsitzung).
Quack Quijote
1
Dies wurde als Bug gegen das Gnome-Terminal abgelegt . Sie können ein ähnliches Verhalten mit erzeugen printf '\003\n'. PuTTY und xterm zeigen eine leere Zeile an, aber das Gnome-Terminal zeigt eine Unicode-Box an.
Dennis Williamson
Dies ist mehr als ein Gnome-Terminal-Fehler, da ich den HT- Charakter bekomme, wenn ich von Ubuntu Hardy zu Ubuntu Karmic innerhalb eines xterm SSHing.
Pkt.
@pts: Was ist ein HT-Charakter? Die horizontale Registerkarte ist 0x09( \011) nicht 0x03(intr / interrupt / ASCII ETX). Ich glaube, ich habe dieses Problem in Ihrer ursprünglichen Frage übersehen. Erhalten Sie eine Unicode-Box 0009, wenn Sie das tun? Was ist der andere Text, der ihn umgibt, oder welche anderen Informationen können Sie bereitstellen? Dieses Problem würde sich etwas vom ^ C-Problem unterscheiden. Können Sie Ihrer Frage einen Screenshot hinzufügen?
Dennis Williamson