Naprawić Control-C w programie wiersza polecenia mysql?

10

W mysqlwierszu poleceń, naciśnięcie Control-Cspowoduje anulowanie programu, i przyprowadzę was z powrotem do bash. W psql, dla postgres, zabije bieżące zapytanie i nie zatrzyma programu psql. Czy jest jakiś sposób na uzyskanie zachowania Control-Cw stylu psql w programie mysql? Ciągle muszę naciskać Control-Cz przyzwyczajenia i logować się z powrotem do mysql.

Control Cnie zabija basha i nie wylogowuje cię po naciśnięciu. Co uważam za dobrą rzecz. Control-Coznacza „przestań robić”.

Rory
źródło

Odpowiedzi:

7

Jeśli naciśniesz Ctrl-C w 5.1 podczas wykonywania zapytania , spowoduje to zatrzymanie wykonania z komunikatem „Wykonywanie zapytania zostało przerwane”

    mysql> INSERT INTO c WYBIERZ rand () * 1000, sha1 (rand ()) F od c;
    Kwerenda przerwana BY Ctrl + C
    BŁĄD 1317 (70100): Wykonanie zapytania zostało przerwane

Kolejna Ctrl-Cprasa zabija klienta.

Starsze wersje umierają okropnie, jak wspomniano w pytaniu, więc zaktualizuj, jeśli to możliwe :)

Edytować:

Wygląda na to, że został dodany w 5.0.25 (i 5.1.10).

Andy
źródło
2
Nadal ma dość głupie zachowanie. Gdy naciśniesz CTRL + C podczas zapytania, powinno ono anulować zapytanie. Kiedy naciśniesz CTRL + C w wierszu polecenia, nie powinno nic robić i NIE wychodzi z MySQL. Kiedy CTRL + C w wierszu polecenia Bash nic się nie dzieje, drukuje nową linię, ale w zasadzie nic nie robi.
Neil
Właściwie wolałbym, żeby to było dokładnie to, co robi psql: jeśli jesteś w połowie drogi do wpisania zapytania, być może wprowadziłeś już kilka wierszy i zdajesz sobie sprawę, że popełniłeś błąd i chcesz przerwać wprowadzanie go, a następnie naciskając CTRL + C powinien skasować z powrotem do monitu.
harmic
Wyjaśnię to jasno: ctrl-C nadal usuwa cię z mysql CLI, nawet w wersji 5.5. Odpowiedź Andy'ego jest nieco niejasna (przynajmniej dla mnie), ale jeśli sprawiło, że poczułeś, że nowsze wersje naprawiły to zachowanie, zostałeś wprowadzony w błąd.
ndemou
@ndemou na jakiej platformie jesteś? Moja odpowiedź została przetestowana na RHEL5.
Andy,
@ Andy przetestował na Ubuntu 12.04. Piszesz „Wygląda na to, że został dodany w 5.0.25”. Jak myślisz, co zostało dodane? To część twojej odpowiedzi, której nie rozumiem. Zobacz także moją odpowiedź poniżej.
ndemou
13

Jak mówi Andy, zostało to naprawione w późniejszych wersjach.

W starszych wersjach nie ma równoważnego skrótu klawiaturowego.

Ale możesz temu zapobiec przy pomocy następującej flagi CLI:

--sigint-ignore

Ignore SIGINT signals (typically the result of typing Control-C).
Dan Carley
źródło
Chodzi o to, że --sigint-ignore usuwa również możliwość zatrzymywania długich zapytań. O! i nic istotnego dla pytania nie zostało naprawione w późniejszej wersji (<= 5,5) AFAICT. Zobacz moją odpowiedź poniżej.
ndemou
5

Jeśli dodasz \ c do końca linii zamiast używać Ctrl-c, możesz zabić linię bez wychodzenia z mysql.

użytkownik32860
źródło
3

Krótka odpowiedź: na początku 2014 roku nie ma sposobu, aby opisać to zachowanie w mysql. Zobacz odpowiedni raport o błędach i stronę w dba.stackexchange, gdzie 3 różne osoby komentują, że wciąż nie jest naprawiony w wersji 5.5 . Ponadto, o ile mogę stwierdzić po długim googlowaniu, nie warto stosować obejścia (patrz poniżej, dlaczego - ignorowanie znaków nie jest dobre). Odpowiedź Andy'ego została zredagowana, aby wspomnieć, że „Wygląda na to, że została dodana w 5.0.25 (i 5.1.10)”. ale prawdopodobnie został wprowadzony w błąd przez komentarz z datą [3 maja 2006 19:04] we wspomnianym wyżej raporcie o błędzie.

Argument --sigint-ignore (patrz odpowiedź Dana Carleya) rzeczywiście powstrzyma mysql przed zrzuceniem cię z powrotem do powłoki, gdy naciśniesz ctrl-C, ale także usunie możliwość zatrzymywania długich zapytań .

Jest to rodzaj błędów w użyteczności, które sprawiają, że zaczynasz :-( Naprawdę oczywiste i prawdopodobnie bardzo łatwe do naprawienia, ale nadal jest to po wielu latach.

ndemou
źródło