MySQL konsolu: Ctrl + C beni deli ediyor


24

MySQL konsolunda beni deli eden bir şey var. Ben vurduğunda ctrl+ cakım komutu iptal etmek terminal çıkışları daktilo ediliyor.

Her bir terminal bir know ( *nixterminaller, Python, PostgreSQL), ctrl+ cakım kumandası iptal eder ve ctrl+ duç çıkar.

Bu sorun 2003 yılında bildirildi ve o zamandan beri birkaç kez çarpıldı.

Bir yolu var mı:

  • Bu davranışı değiştirin veya
  • MySQL dev ekibini bunun gerçekten sinir bozucu olduğuna ikna etmek mi?

Yanıtlar:


6

Davranışı değiştirmek için, mysql CLI kaynağını SIGINTindirin ve işleyiciyi uygun gördüğünüz şekilde davranacak şekilde değiştirin, ardından yeniden derleyin ve kurun.


1
Bu potansiyel olarak tehlikeli değil mi? Gelecekteki sürümleri için işe yarayacağının garantisi yok. Artı , işe yarayacak gibi görünüyor, ama daha sonra tamamen ilgisiz bir yerde tuhaf davranışlar elde edemeyeceğinizi nasıl bilebilirdiniz?
Pacerier

21

Müşterinin en azından 5.6.14 sürümü , SIGINT işleyicisini tamamen yok saymak için --sigint-ignore seçeneğine sahiptir. 7 Ekim 2004’te eklenmiş görünüyor - bu yüzden en azından bir süre oldu. Yeni test ettim ve CTRL-C'nin MySQL istemcisini iptal etmesini önlüyor. Ancak, CTRL-C'nin geçerli komut satırı arabelleğini de BASH kabuğunda olduğu gibi iptal etmesi de iyi olurdu - PostgreSQL CLI'nın yaptığı gibi. Böyle bir şeyi uygulamanın ne kadar zor olduğunu görmek için MySQL'i çatalladım. Hazır olduğunda / varsa tarball bağlantısı olan bir Homebrew formülünü göndereceğim.

GÜNCELLEME 1 O günlerden birine sahip oldunuz mu? Vaat edilen yamayı oluşturdum ve sonra göstermek için bir video oluşturmaya karar verdim. İşe yaradı! Ancak, devre dışı bırakmadım! Eh, aslında MySQL'in geçen yıl çekirdek müşterinin işlevselliğiyle hazırladığı ortaya çıktı ! Evet, bu Q'ya A en azından MySQL 5.7.3-794-g901d27f'nin istemcisini indirmektir. Hepimizin istediği işlevselliğe sahiptir.

ÖRNEK Komut satırından sadece --sigint-ignore bayrağını ekleyin:

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

Veya, aşağıdaki içeriğe sahip kullanıcı hesabınız için $HOME/.my.cnf( %USERPROFILE%/.my.cnfWindows'ta) bir MySQL yapılandırma dosyası yaptığımı ve oluşturduğumu yapın :

[mysql]
sigint-ignore=TRUE

Bu, tüm mysqluygulamaların can sıkıcı Ctrl-C'yi görmezden gelmesini ve iyi bir SQL istemcisi gibi davranmasını sağlayacaktır .


19

ctrl+ cDavranışı can sıkıcı olsa da \c, mevcut sorguyu iptal etmek için hala kullanabilirsiniz . Mysql CLI kullanırken + \cyerine kullanmanız gerektiğini kendiniz eğitmeniz gerekir !ctrlc


1
Bu fikri bulan adam kim? Kafasını istiyoruz.
Pacerier

1
Satırın başına kadar silmek için Ctrl + U tuşlarını, geriye doğru bir kelimeyi silmek için Ctrl + W tuşlarını kullanabilirsiniz.
Damien eal Ceallaigh

9

İyi haber: MySQL'in ^ C işlevselliği nihayet # 66583 ile düzeltildi .

Gönderen 5.7.0 changelog:

Önceden, mysql içindeki Control + C, bir tane varsa mevcut ifadeyi kesintiye uğrattı ya da eğer değilse mysql'den çıktı. Şimdi, Control + C mevcut bir ifadeyi keser veya bir kısmi giriş satırını iptal ederse iptal eder, ancak çıkmaz.


5.6.35 kullanıyorum ve bunun bir sorun olmadığını doğruladım.
flow2k

1

İstemcinin hangi sürümünü kullanıyorsunuz? Bunun eski davranış olduğunu hatırlıyorum, ancak son sürüm 5.1 ve 5.5 sürümleri istemciden çıkmadan çalışan komutu iptal ediyor gibi görünüyor. Sonra yine Percona yapıları kullanıyorum olabilir. Bu durumda müşterilerini çalıştırmayı deneyebilirsin.


hmm, 5.5 Percona kullanıyorum ve ctrl + c hala mysql istemcisini durduruyor (mevcut sql komutunu değil)
Derek Downey

Sanırım OP'yi yanlış okudum. Benim cevabım, henüz çalıştırılma emrini boşaltma arzusu değil, idamın ortasında olan bir emri ele almaktı.
atxdba

@Atxdba ile aynı fikirdeyim - 5.5 numaralı Percona derlemesini de çalıştırıyorum ve ctrl + c şu anda yürütülen komuttan çıkar. Yürütülecek bir komut yoksa, CLI'den çıkar. Bu, ctrl + d'nin çalıştığı bir kabuğun dışına düşebilir, ancak kabuk içinde çalışan bir komut dosyanız varsa, ctrl + c ... 'ye basarsanız farklı komutlar / kabukları / komut dosyaları için farklı komutlar durur! Kafa karıştırıcı olabilir ...: ~ s
Dave Rix

@DaveRix Ben de katılıyorum, ctrl + c şu anda yürütülmekte olan bir sorgudan çıkar. Fakat OP'nin maalesef konusu değildi.
Derek Downey,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.