Sửa lỗi Control-C trong chương trình dòng lệnh mysql?


10

Trong mysqldòng lệnh, nhấn Control-Csẽ hủy chương trình và đưa bạn trở lại bash. Trong psql, một cho postgres, nó sẽ giết truy vấn hiện tại và sẽ không dừng chương trình psql. Có cách nào để có được hành vi kiểu psql Control-Ctrong chương trình mysql không? Tôi tiếp tục thấy mình bức xúc Control-Cbởi thói quen và phải đăng nhập lại vào mysql.

Control Ckhông giết bash và đăng xuất bạn khi bạn nhấn nó. Mà tôi nghĩ là một điều tốt. Control-Ccó nghĩa là 'dừng những gì bạn đang làm'.

Câu trả lời:


7

Nếu bạn nhấn Ctrl-C trong 5.1 trong khi thực hiện truy vấn , nó sẽ tạm dừng việc thực thi với thông báo "Việc thực hiện truy vấn bị gián đoạn"

    mysql CHỈ VÀO c CHỌN rand () * 1000, sha1 (rand ()) TỪ c;
    Truy vấn bị hủy bỏ bởi Ctrl + C
    LRI 1317 (70100): Việc thực hiện truy vấn bị gián đoạn

Một Ctrl-Cbáo chí nữa giết chết khách hàng.

Các phiên bản cũ chết khủng khiếp như đã lưu ý trong câu hỏi, vì vậy hãy nâng cấp nếu có thể :)

Biên tập:

Có vẻ như nó đã được thêm vào 5.0.25 (và 5.1.10).


2
Nó vẫn có hành vi khá ngu ngốc. Khi bạn nhấn CTRL + C trong khi truy vấn, nó sẽ hủy truy vấn. Khi bạn nhấn CTRL + C tại dấu nhắc, nó sẽ không làm gì cả và KHÔNG thoát khỏi MySQL. Khi bạn CTRL + C tại dấu nhắc Bash khi không có gì xảy ra, nó sẽ in một dòng mới, nhưng về cơ bản không có gì.
Neil

Trên thực tế, những gì tôi muốn làm là chính xác những gì psql làm: nếu bạn đang thực hiện một nửa truy vấn, có lẽ đã nhập một vài dòng và bạn nhận ra mình đã mắc lỗi và muốn hủy bỏ việc nhập nó, sau đó nhấn CTRL + C nên xóa trở lại dấu nhắc.
hại

Tôi sẽ nói rõ: ctrl-C vẫn đưa bạn ra khỏi mysql CLI ngay cả ở phiên bản 5.5. Câu trả lời của Andy hơi mơ hồ (ít nhất là với tôi) nhưng nếu nó khiến bạn cảm thấy rằng các phiên bản mới hơn đã khắc phục hành vi này thì bạn đã bị lừa.
ndemou

@ndemou bạn đang ở trên nền tảng nào? Câu trả lời của tôi đã được thử nghiệm trên RHEL5.
Andy

@Andy đã thử nghiệm trên Ubuntu 12.04. Bạn đang viết "Có vẻ như nó đã được thêm vào 5.0.25". Bạn nghĩ gì đã được thêm vào? Đó là phần của câu trả lời của bạn mà không hiểu. Xem thêm câu trả lời của tôi dưới đây.
ndemou

13

Giống như Andy nói, nó đã được sửa trong các phiên bản sau.

Không có phím tắt tương đương trong các phiên bản cũ hơn.

Nhưng bạn có thể ngăn điều đó xảy ra với cờ CLI sau:

--sigint-ignore

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

Điều hấp dẫn là --sigint-ign cũng loại bỏ khả năng dừng các truy vấn chạy dài. Oh! và không có gì liên quan đến câu hỏi đã được sửa trong phiên bản sau (<= 5.5) AFAICT. Xem câu trả lời của tôi dưới đây.
ndemou

5

Nếu bạn thêm một \ c vào cuối dòng thay vì sử dụng Ctrl-c thì bạn có thể tắt dòng mà không cần thoát mysql.


3

Câu trả lời ngắn: Kể từ đầu năm 2014, không có cách nào để có hành vi được mô tả trong mysql. Xem báo cáo lỗi có liên quan và một trang trong dba.stackexchange nơi 3 người khác nhận xét rằng nó vẫn chưa được sửa trong phiên bản 5.5 . Ngoài ra, theo như tôi có thể nói sau một thời gian dài, không có cách giải quyết nào đáng để sử dụng (xem dưới đây tại sao - bỏ qua không tốt). Câu trả lời của Andy đã được chỉnh sửa để đề cập rằng "Có vẻ như nó đã được thêm vào 5.0.25 (và 5.1.10)." nhưng anh ta có lẽ đã bị nhầm lẫn bởi bình luận có ngày [3 tháng 5 năm 2006 19:04] trong báo cáo lỗi đã nói ở trên.

Đối số --sigint-ign (xem câu trả lời của Dan Carley) thực sự sẽ ngăn mysql thả bạn trở lại vỏ khi bạn nhấn ctrl-C nhưng cũng sẽ loại bỏ khả năng dừng truy vấn chạy dài .

Đây là loại lỗi khả năng sử dụng khiến bạn gặp phải :-( Thực sự rõ ràng và có thể cực kỳ dễ sửa nhưng vẫn ở đây sau nhiều năm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.