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.