Perbaiki Control-C di program baris perintah mysql?


10

Di mysqlbaris perintah, menekan Control-Cakan membatalkan program, dan membawa Anda kembali ke bash. Dalam psql, untuk postgres, ia akan mematikan permintaan saat ini dan tidak akan menghentikan program psql. Apakah ada cara untuk mendapatkan perilaku gaya psql Control-Cdi dalam program mysql? Saya terus menemukan diri saya menekan Control-Coleh kebiasaan dan harus login kembali ke mysql.

Control Ctidak membunuh bash, dan mengeluarkan Anda ketika Anda menekannya. Yang menurut saya adalah hal yang baik. Control-Cberarti 'hentikan apa yang Anda lakukan'.

Jawaban:


7

Jika Anda menekan Ctrl-C di 5.1 selama eksekusi permintaan , itu akan menghentikan eksekusi dengan pesan "Eksekusi query terputus"

    mysql> INSERT INTO c SELECT rand () * 1000, sha1 (rand ()) FROM c;
    Kueri dibatalkan dengan Ctrl + C
    GALAT 1317 (70100): Eksekusi kueri terputus

Ctrl-CPers lebih lanjut membunuh klien.

Versi lama mati mengerikan seperti yang disebutkan dalam pertanyaan, jadi tingkatkan jika memungkinkan :)

Edit:

Sepertinya ditambahkan di 5.0.25 (dan 5.1.10).


2
Itu masih memiliki perilaku yang sangat bodoh. Ketika Anda menekan CTRL + C selama permintaan, itu harus membatalkan permintaan. Saat Anda menekan CTRL + C saat diminta, seharusnya tidak melakukan apa-apa dan TIDAK keluar dari MySQL. Ketika Anda CTRL + C di Bash prompt ketika tidak ada yang terjadi, ia mencetak baris baru, tetapi pada dasarnya tidak melakukan apa pun.
Neil

Sebenarnya apa yang saya lebih suka lakukan adalah apa yang dilakukan psql: jika Anda setengah jalan memasukkan kueri, mungkin sudah memasukkan beberapa baris, dan Anda menyadari bahwa Anda telah membuat kesalahan dan ingin membatalkan memasukkannya, lalu menekan CTRL + C harus menghapus kembali ke prompt.
Berbahaya

Saya akan menjelaskan: ctrl-C masih mengeluarkan Anda dari CLI mysql bahkan pada versi 5.5. Jawaban Andy agak kabur (bagi saya setidaknya) tetapi jika itu membuat Anda merasa bahwa versi yang lebih baru memperbaiki perilaku ini, Anda telah disesatkan.
ndemou

@Anda platform mana Anda berada? Jawaban saya diuji di RHEL5.
Andy

@Andy diuji di ubuntu 12.04. Anda menulis "Sepertinya ditambahkan pada 5.0.25". Menurut Anda apa yang ditambahkan? Itulah bagian dari jawaban Anda yang tidak saya mengerti. Lihat juga jawaban saya di bawah ini.
ndemou

13

Seperti kata Andy, itu diperbaiki dalam versi yang lebih baru.

Tidak ada pintasan keyboard yang setara di versi yang lebih lama.

Tetapi Anda dapat mencegahnya terjadi dengan flag CLI berikut:

--sigint-ignore

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

Tangkapannya adalah --sigint-abaikan juga menghilangkan kemampuan untuk menghentikan kueri yang berjalan lama. Oh! dan tidak ada yang relevan dengan pertanyaan yang telah diperbaiki dalam versi yang lebih baru (<= 5.5) AFAICT. Lihat jawaban saya di bawah.
ndemou

5

Jika Anda menambahkan a \ c kemudian akhir baris Anda daripada menggunakan Ctrl-c maka Anda dapat membunuh baris tanpa keluar mysql.


3

Jawaban singkat: Pada awal 2014 tidak ada cara untuk memiliki perilaku yang dijelaskan di mysql. Lihat laporan bug yang relevan dan halaman di dba.stackexchange di mana 3 orang berbeda berkomentar bahwa itu masih belum diperbaiki di v5.5 . Juga sejauh yang saya tahu setelah googling yang panjang tidak ada solusi yang layak digunakan (lihat di bawah mengapa --sigint-abaikan tidak baik). Jawaban Andy diedit untuk menyebutkan bahwa "Sepertinya ditambahkan pada 5.0.25 (dan 5.1.10)." tetapi dia mungkin disesatkan oleh komentar dengan tanggal [3 Mei 2006 19:04] dalam laporan bug tersebut.

Argumen --sigint-abaikan (lihat jawaban Dan Carley) memang akan menghentikan mysql dari menjatuhkan Anda kembali ke shell ketika Anda menekan ctrl-C tetapi juga akan menghapus kemampuan untuk menghentikan permintaan yang sudah berjalan lama .

Ini adalah jenis bug kegunaan yang membuat Anda pergi :-( Benar-benar jelas dan mungkin sangat mudah diperbaiki tetapi masih di sini setelah bertahun-tahun.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.