Correggi Control-C nel programma da riga di comando mysql?


10

Nella mysqlriga di comando, premendo Control-Csi annulla il programma e si torna alla bash. In psql, quello per Postgres, ucciderà la query corrente e non fermerà il programma psql. Esiste un modo per ottenere il comportamento in stile psql Control-Cnel programma mysql? Continuo a trovarmi pressato Control-Cper abitudine e dover riconnettermi a mysql.

Control Cnon uccide bash e non ti disconnette quando lo premi. Quale penso sia una buona cosa. Control-Csignifica "ferma quello che stai facendo".

Risposte:


7

Se premi Ctrl-C in 5.1 durante l'esecuzione della query , interromperà l'esecuzione con il messaggio "L'esecuzione della query è stata interrotta"

    mysql> INSERISCI in c SELECT rand () * 1000, sha1 (rand ()) FROM c;
    Query interrotta DA Ctrl + C
    ERRORE 1317 (70100): l'esecuzione della query è stata interrotta

Un'ulteriore Ctrl-Cstampa uccide il cliente.

Le versioni precedenti muoiono orribilmente come indicato nella domanda, quindi aggiorna se possibile :)

Modificare:

Sembra che sia stato aggiunto in 5.0.25 (e 5.1.10).


2
Ha ancora un comportamento piuttosto stupido. Quando si preme CTRL + C durante una query, è necessario annullare la query. Quando premi CTRL + C al prompt, non dovrebbe fare nulla e NON uscire da MySQL. Quando premi CTRL + C al prompt di Bash quando non succede nulla, stampa una nuova riga, ma sostanzialmente non fa nulla.
Neil,

In realtà quello che preferirei fare era esattamente quello che fa psql: se sei a metà strada nell'inserimento di una query, forse hai già inserito più righe, e ti rendi conto di aver fatto un errore e vuoi interrompere inserendolo, quindi premi CTRL + C dovrebbe tornare al prompt.
dannoso

Lo chiarirò: ctrl-C ti fa ancora uscire dalla CLI mysql anche alla versione 5.5. La risposta di Andy è un po 'vaga (almeno per me) ma se ti ha fatto sentire che le versioni più recenti hanno risolto questo comportamento sei stato ingannato.
ndemou,

@ndemou su quale piattaforma sei? La mia risposta è stata testata su RHEL5.
Andy,

@Andy testato su Ubuntu 12.04. Stai scrivendo "Sembra che sia stato aggiunto in 5.0.25". Cosa pensi sia stato aggiunto? Questa è la parte della tua risposta che non capisco. Vedi anche la mia risposta qui sotto.
ndemou,

13

Come dice Andy, è stato risolto nelle versioni successive.

Non esiste una scorciatoia da tastiera equivalente nelle versioni precedenti.

Ma puoi impedire che ciò accada con il seguente flag CLI:

--sigint-ignore

Ignore SIGINT signals (typically the result of typing Control-C).

Il problema è che --sigint-ignore rimuove anche la possibilità di interrompere le query di lunga durata. Oh! e nulla di pertinente alla domanda è stato corretto nella versione successiva (<= 5.5) AFAICT. Vedi la mia risposta qui sotto.
ndemou,

5

Se aggiungi un \ c alla fine della tua linea invece di usare Ctrl-c, puoi uccidere la linea senza uscire da mysql.


3

Risposta breve: all'inizio del 2014 non è possibile avere il comportamento descritto in mysql. Vedi la segnalazione di bug pertinente e una pagina in dba.stackexchange in cui 3 persone diverse commentano che non è stato ancora corretto nella v5.5 . Inoltre, per quanto ne so dopo una lunga ricerca su Google, non c'è soluzione alternativa che valga la pena usare (vedi qui sotto perché --sigint-ignore non è buono). La risposta di Andy è stata modificata per menzionare che "Sembra che sia stato aggiunto in 5.0.25 (e 5.1.10)." ma è stato probabilmente ingannato dal commento con data [3 maggio 2006 19:04] nella suddetta segnalazione di bug.

L'argomento --sigint-ignore (vedi la risposta di Dan Carley) impedirà effettivamente a mysql di riportarti indietro nella shell quando premi ctrl-C, ma rimuoverà anche la possibilità di interrompere le query a esecuzione prolungata .

Questo è il tipo di bug di usabilità che ti fa andare :-( Davvero ovvio e probabilmente estremamente facile da risolvere, ma è ancora qui dopo molti anni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.