MySQL-Konsole: Strg + C macht mich verrückt

24

Es gibt etwas in der MySQL-Konsole, das mich verrückt macht. Wenn ich ctrl+ cdrücke, um den aktuell eingegebenen Befehl abzubrechen, wird das Terminal beendet.

In jedem Endgerät I Know ( *nixTerminals Python, PostgreSQL), ctrl+ cAbbruch des aktuellen Befehl und ctrl+ dverlässt das Terminal.

Dieses Problem wurde 2003 gemeldet und ist seitdem mehrmals aufgetreten.

Gibt es einen Weg zu:

  • Ändern Sie dieses Verhalten oder
  • Überzeugen Sie das MySQL-Entwicklerteam, dass dies wirklich ärgerlich ist?
Adam Matan
quelle

Antworten:

6

Laden Sie zum Ändern des Verhaltens den Quellcode für die mysql-CLI herunter und ändern Sie den SIGINTHandler so, dass er sich nach Belieben verhält. Kompilieren und installieren Sie ihn anschließend erneut.

Philᵀᴹ
quelle
1
Ist das nicht potenziell gefährlich? Es gibt keine Garantie, dass es für zukünftige Versionen funktionieren würde. Außerdem sieht es so aus, als würde es funktionieren, aber woher wüssten Sie, dass Sie später an einem völlig unabhängigen Ort kein seltsames Verhalten zeigen würden?
Pacerier
21

Mindestens Version 5.6.14 des Clients verfügt über die Option --sigint-ignore , um den SIGINT-Handler vollständig zu ignorieren. Es scheint am 7. Oktober 2004 hinzugefügt worden zu sein - also ist es zumindest eine Weile her. Ich habe es gerade getestet und es hindert STRG-C daran, den MySQL-Client abzubrechen. Es wäre jedoch schön, wenn STRG-C auch den aktuellen Befehlszeilenpuffer wie in der BASH-Shell abbrechen würde - so wie es die PostgreSQL-CLI tut. Ich habe MySQL gegabelt, um zu sehen, wie schwierig es sein würde, so etwas zu implementieren. Ich werde eine Homebrew-Formel mit einem Tarball-Link posten, wenn es fertig ist.

UPDATE 1 Hast du jemals einen dieser Tage? Ich habe den versprochenen Patch erstellt und dann beschlossen, ein Video zu erstellen, um es zu demonstrieren. Es funktionierte! Ich konnte es jedoch nicht deaktivieren! Nun, es stellt sich heraus, dass MySQL letztes Jahr tatsächlich die Funktionalität des Kern-Clients eingebunden hat ! Ja, das A zu diesem Q ist, mindestens den Client von MySQL 5.7.3-794-g901d27f herunterzuladen. Es hat die Funktionalität, die wir uns alle gewünscht haben.

Beispiel in der Befehlszeile fügen Sie einfach die --sigint-ignore Flagge:

mysql --host=127.0.0.1 --port=8900 --user=root -p --sigint-ignore DBNAME

Oder erstellen Sie wie gewohnt eine MySQL-Konfigurationsdatei für Ihr Benutzerkonto unter $HOME/.my.cnf( %USERPROFILE%/.my.cnfunter Windows) mit folgendem Inhalt:

[mysql]
sigint-ignore=TRUE

Dadurch wird sichergestellt, dass alle mysqlAusführungen die lästige Tastenkombination Strg-C ignorieren und sich wie ein guter SQL-Client verhalten.

akutz
quelle
19

Während das ctrl+ c-Verhalten ärgerlich ist, können Sie \cdie aktuelle Abfrage trotzdem mit abbrechen. Sie müssen sich nur aneignen, dass Sie bei der Verwendung von mysql CLI \canstelle von ctrl+ c!

Derek Downey
quelle
1
Wer ist der Typ, der auf diese Idee gekommen ist? Wir wollen seinen Kopf.
Pacerier
1
Sie können auch Strg + U verwenden, um zum Zeilenanfang zu löschen, und Strg + W, um ein Wort rückwärts zu löschen.
Damien Ó Ceallaigh
9

Gute Nachricht: Die ^ C-Funktionalität von MySQL wurde mit # 66583 endlich behoben .

Aus dem 5.7.0 Changelog:

Zuvor unterbrach Strg + C in MySQL die aktuelle Anweisung, falls vorhanden, oder beendete MySQL, falls nicht. Jetzt unterbricht Strg + C die aktuelle Anweisung, falls vorhanden, oder bricht eine teilweise Eingabezeile ab, wird jedoch nicht beendet.

Damien Ó Ceallaigh
quelle
Ich verwende 5.6.35 und bestätige, dass dies kein Problem ist.
flow2k
1

Welche Version des Clients verwenden Sie? Ich erinnere mich, dass dies das ältere Verhalten ist, aber die neuesten Versionen von 5.1 und 5.5 scheinen den laufenden Befehl einfach abzubrechen, ohne den Client zu beenden. Andererseits kann es sein, dass ich die Percona-Builds verwende. Sie könnten versuchen, nur ihren Client auszuführen, wenn dies der Fall ist.

atxdba
quelle
hmm, ich lasse 5.5 Percona laufen und ctrl + c bricht immer noch den mysql-client ab (nicht den aktuellen sql-befehl)
Derek Downey
Ich glaube, ich habe das OP falsch verstanden. Meine Antwort betraf einen Befehl, der gerade ausgeführt wurde, und nicht den Wunsch, Ihnen einen noch auszuführenden Befehl auszublenden.
atxdba
Ich stimme mit @atxdba überein - ich führe auch den Percona-Build 5.5 aus, und Strg + C bricht den aktuell ausgeführten Befehl ab. Wenn kein Befehl ausgeführt wird, wird die CLI verlassen. Es kann sein, dass Strg + D aus einer laufenden Shell herausfällt. Wenn Sie jedoch ein Skript in der Shell ausführen, stoppt dies, wenn Sie Strg + C drücken ... verschiedene Befehle für verschiedene Apps / Shells / Skripte! Kann verwirrend sein ...: ~ s
Dave Rix
@ DaveRix Ich stimme auch zu, Strg + C löscht eine Abfrage, die gerade ausgeführt wird. Aber darum ging es beim OP leider nicht.
Derek Downey