Console MySQL: Ctrl + C mi fa impazzire


24

C'è qualcosa nella console MySQL che mi fa impazzire. Quando premo ctrl+ cper annullare il comando corrente da digitare, il terminale si chiude.

In ogni sapere I terminali ( *nixterminali Python, PostgreSQL), ctrl+ cannulla il comando corrente e ctrl+ desce il terminale.

Questo problema è stato segnalato nel 2003 e da allora è stato risolto più volte.

C'è un modo per:

  • Cambia questo comportamento, o
  • Convincere il team di sviluppatori MySQL che questo è davvero fastidioso?

Risposte:


6

Per modificare il comportamento, scarica l'origine della CLI mysql e modifica il SIGINTgestore in modo che si comporti come ritieni opportuno, quindi ricompila e installa.


1
Non è potenzialmente pericoloso? Non è garantito che funzioni per le versioni future. Inoltre , sembra che funzionerebbe, ma come faresti a sapere che non avresti avuto un comportamento strano in un posto totalmente indipendente in seguito?
Pacerier,

21

Almeno la versione 5.6.14 del client ha l' opzione --sigint-ignore per ignorare totalmente il gestore SIGINT. Sembra che sia stato aggiunto il 7 ottobre 2004, quindi almeno da un po '. L'ho appena testato e impedisce a CTRL-C di cancellare il client MySQL. Tuttavia, sarebbe bello se CTRL-C annullasse anche il buffer della riga di comando corrente come fa sulla shell BASH - come fa la CLI PostgreSQL. Ho biforcuto MySQL per vedere quanto sarebbe difficile implementare qualcosa del genere. Pubblicherò una formula Homebrew con un link tarball quando / se è pronto.

AGGIORNAMENTO 1 Hai mai avuto uno di quei giorni? Ho creato la patch promessa e poi ho deciso di creare un video per dimostrarlo. Ha funzionato! Tuttavia, non ho potuto disabilitarlo! Bene, si scopre che MySQL ha effettivamente fornito funzionalità al client principale l'anno scorso ! Sì, la A per questa Q è scaricare almeno il client MySQL 5.7.3-794-g901d27f. Ha la funzionalità che tutti desideravamo.

ESEMPIO Dalla riga di comando è sufficiente aggiungere il flag --sigint-ignore:

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

Oppure, fai come ho fatto io e crea un file di configurazione MySQL per il tuo account utente su $HOME/.my.cnf( %USERPROFILE%/.my.cnfsu Windows) con il seguente contenuto:

[mysql]
sigint-ignore=TRUE

Questo assicurerà che tutte le mysqlesecuzioni ignorino il fastidioso Ctrl-C e si comportino come un buon client SQL.


19

Mentre il comportamento ctrl+ cè fastidioso, puoi comunque utilizzare \cper annullare la query corrente. Devi solo allenarti che quando usi mysql CLI, usi \cinvece di ctrl+ c!


1
Chi è il ragazzo che ha avuto questa idea? Vogliamo la sua testa.
Pacerier,

1
Puoi anche usare Ctrl + U per cancellare all'inizio della riga e Ctrl + W per cancellare una parola all'indietro.
Damien Ó Ceallaigh,

9

Buone notizie: la funzionalità ^ C di MySQL è stata finalmente risolta da # 66583 .

Dal log delle modifiche 5.7.0 :

In precedenza, Control + C in mysql aveva interrotto la dichiarazione corrente se ce n'era una, oppure se ne usciva mysql. Ora Control + C interrompe l'istruzione corrente, se presente, o annulla qualsiasi linea di input parziale, ma non esce.


Sto usando 5.6.35 e verificato che questo non è un problema.
flow2k,

1

Quale versione del client stai usando? Ricordo che si trattava del comportamento precedente, ma le versioni recenti di 5.1 e 5.5 sembrano annullare semplicemente il comando in esecuzione senza uscire dal client. Poi di nuovo potrebbe essere che sto usando le build di Percona. In tal caso, potresti provare a eseguire il client.


hmm, sto eseguendo 5.5 Percona e ctrl + c interrompe ancora il client mysql (non l'attuale comando sql)
Derek Downey

Penso di aver letto male l'OP. La mia risposta era indirizzare un comando che stava per essere eseguito, non il desiderio di cancellarti un comando ancora da eseguire.
Atxdba,

Sono d'accordo con @atxdba - sto anche eseguendo la build Percona di 5.5 e ctrl + c esce dal comando attualmente in esecuzione. Se non è in esecuzione alcun comando, esce dalla CLI. Può essere che ctrl + d esca da una shell in esecuzione, ma se hai uno script in esecuzione all'interno della shell, ciò si interromperà se premi ctrl + c ... comandi diversi per app / shell / script diversi! Può essere fonte di confusione ...: ~ s
Dave Rix il

@DaveRix Sono d'accordo anche io, ctrl + c esce da una query che è attualmente in esecuzione. Sfortunatamente non era questo l'OP.
Derek Downey,
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.