it-swarm-eu.dev

Konzola MySQL: Ctrl + C mě nutí matice

V konzole MySQL je něco, co mě pohání ořechy. Když jsem zasáhl ctrl+c pro zrušení aktuálního zadaného příkazu terminál ukončí.

V každém terminálu, který znám (*nix terminály, Python, PostgreSQL), ctrl+c zruší aktuální příkaz a ctrl+d opouští terminál.

Tento problém byl hlášeno v roce 20 a od té doby několikrát narostl.

Existuje způsob, jak:

  • Změňte toto chování nebo
  • Přesvědčte tým MySQL dev, že je to opravdu nepříjemné?
26
Adam Matan

Chcete-li toto chování změnit, stáhněte si zdroj pro mysql CLI a upravte obslužný program SIGINT tak, aby se choval tak, jak uznáte za vhodný, a pak zkompilujte a nainstalujte.

6
Philᵀᴹ

Alespoň verze 5.6.14 klienta má možnost - sigint-ignore pro úplné ignorování obsluhy SIGINT. Zdá se, že to bylo přidáno 7. října 2004 - takže to bylo asi nějakou dobu. Právě jsem to otestoval a brání CTRL-C zrušit klienta MySQL. Bylo by však hezké, kdyby CTRL-C také zrušil aktuální vyrovnávací paměť příkazového řádku, jako tomu je v prostředí BASH - stejně jako v případě PostgreSQL CLI. Viděl jsem MySQL, abych viděl, jak těžké by bylo implementovat nějakou takovou věc. Až to bude hotové, pošlu homebrejský vzorec s odkazem na tarball.

UPDATE 1 Už jste někdy měli jeden z těchto dnů? Vytvořil jsem zaslíbené patch , a pak jsem se rozhodl vytvořit video, které to demonstruje. Fungovalo to! Nemohl jsem to však zakázat! No, ukáže se, že MySQL ve skutečnosti pečel ve funkčnosti s jádrem klienta minulý rok ! Ano, A k tomuto Q je stáhnout alespoň klienta MySQL 5.7.3-794-g901d27f. Má funkčnost, kterou jsme si všichni přáli.

[~ # ~] příklad [~ # ~] Z příkazového řádku stačí přidat příznak --sigint-ignore:

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

Nebo udělejte to, co jsem udělal, a vytvořte konfigurační soubor MySQL pro svůj uživatelský účet na adrese $HOME/.my.cnf (%USERPROFILE%/.my.cnf ve Windows) s následujícím obsahem:

[mysql]
sigint-ignore=TRUE

Tím zajistíte, že všechny mysql provádění ignorují otravné Ctrl-C a budou se chovat jako dobrý SQL klient.

22
akutz

Zatímco ctrl+c chování je nepříjemné, stále můžete použít \c pro zrušení aktuálního dotazu. Musíte se jen naučit, že při používání mysql CLI použijete \c namísto ctrl+c!

19
Derek Downey

Dobrá zpráva: Funkce MySQL ^ C byla konečně opravena # 6658 .

Z 5.7.0 changelogu:

Dříve Control + C v mysql přerušil aktuální příkaz, pokud existuje, nebo opustil mysql, pokud ne. Nyní Control + C přeruší aktuální příkaz, pokud existuje, nebo zruší jakýkoli částečný vstupní řádek jinak, ale neopustí.

9

Jakou verzi klienta používáte? Pamatuji si, že se jedná o starší chování, ale zdá se, že nedávné verze 5.1 a 5.5 pouze zrušují běžící příkaz bez ukončení klienta. Pak zase to může být, že používám sestavení Percona. Pokud je to tak, můžete zkusit spustit jejich klienta.

1
atxdba