แก้ไข Control-C ในโปรแกรมบรรทัดคำสั่ง mysql หรือไม่


10

ในmysqlบรรทัดคำสั่งการกดControl-Cจะยกเลิกโปรแกรมและนำคุณกลับสู่การทุบตี ในpsqlหนึ่งสำหรับ postgres มันจะฆ่าแบบสอบถามปัจจุบันและจะไม่หยุดโปรแกรม psql มีวิธีใดบ้างที่จะใช้ลักษณะการทำงานของ psql Control-Cในโปรแกรม mysql? ฉันพบตัวเองกดControl-Cนิสัยและต้องกลับเข้าสู่ mysql

Control Cไม่ฆ่าทุบตีและออกจากระบบเมื่อคุณกด ซึ่งฉันคิดว่าเป็นสิ่งที่ดี Control-Cหมายถึง 'หยุดสิ่งที่คุณทำ'

คำตอบ:


7

หากคุณกด Ctrl-C ใน 5.1 ในระหว่างการดำเนินการแบบสอบถามมันจะหยุดการดำเนินการกับข้อความ "การดำเนินการแบบสอบถามถูกขัดจังหวะ"

    mysql> INSERT INTO SELECT SELECT rand () * 1,000, sha1 (rand ()) จาก c;
    คำค้นหาถูกยกเลิกโดย Ctrl + C
    ข้อผิดพลาด 1317 (70100): การดำเนินการค้นหาถูกขัดจังหวะ

Ctrl-Cกดอีกต่อไปฆ่าลูกค้า

รุ่นที่เก่ากว่าจะตายอย่างน่ากลัวตามที่ระบุในคำถามดังนั้นโปรดอัพเกรดถ้าเป็นไปได้ :)

แก้ไข:

ดูเหมือนว่าจะถูกเพิ่มใน 5.0.25 (และ 5.1.10)


2
มันยังคงมีพฤติกรรมโง่ ๆ เมื่อคุณกด CTRL + C ระหว่างการสืบค้นควรยกเลิกแบบสอบถาม เมื่อคุณกด CTRL + C ที่พรอมต์มันไม่ควรทำอะไรเลยและไม่ออกจาก MySQL เมื่อคุณ CTRL + C ที่พรอมต์ Bash เมื่อไม่มีอะไรเกิดขึ้นมันจะพิมพ์บรรทัดใหม่ แต่โดยทั่วไปจะไม่ทำอะไรเลย
Neil

จริง ๆ แล้วสิ่งที่ฉันอยากจะทำก็คือสิ่งที่ psql ทำ: ถ้าคุณป้อนแบบสอบถามครึ่งทางอาจจะมีหลายบรรทัดแล้วและคุณรู้ว่าคุณทำผิดพลาดและต้องการยกเลิกการป้อนแล้วกด CTRL + C ควรล้างกลับไปที่พรอมต์
อันตราย

ฉันจะทำให้ชัดเจน: ctrl-C ยังคงปล่อยคุณออกจาก mysql CLI แม้ในเวอร์ชัน 5.5 คำตอบของ Andy นั้นค่อนข้างคลุมเครือ (สำหรับฉันอย่างน้อย) แต่ถ้ามันทำให้คุณรู้สึกว่ารุ่นที่ใหม่กว่านั้นแก้ไขพฤติกรรมนี้คุณผิดไปแล้ว
ndemou

@ndemou คุณอยู่บนแพลตฟอร์มใด คำตอบของฉันถูกทดสอบใน RHEL5
แอนดี้

@ และทดสอบบน Ubuntu 12.04 คุณกำลังเขียน "ดูเหมือนว่าจะถูกเพิ่มใน 5.0.25" คุณคิดว่าอะไรถูกเพิ่มเข้ามา? นั่นเป็นส่วนหนึ่งของคำตอบที่คุณไม่เข้าใจ ดูคำตอบของฉันด้านล่าง
ndemou

13

เช่นเดียวกับแอนดี้พูดว่ามันได้รับการแก้ไขในรุ่นที่ใหม่กว่า

ไม่มีแป้นพิมพ์ลัดที่เทียบเท่าในรุ่นที่เก่ากว่า

แต่คุณสามารถป้องกันไม่ให้เกิดขึ้นกับการตั้งค่าสถานะ CLI ต่อไปนี้:

--sigint-ignore

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

การจับคือ --sigint- ละเว้นยังเอาความสามารถในการหยุดการสืบค้นที่ใช้เวลานาน Oh! และไม่มีการแก้ไขอะไรที่เกี่ยวข้องกับคำถามในรุ่นที่ใหม่กว่า (<= 5.5) AFAICT ดูคำตอบของฉันร้อง
ndemou

5

หากคุณเพิ่ม \ c ไปยังจุดสิ้นสุดของบรรทัดแทนที่จะใช้ Ctrl-c คุณสามารถฆ่าบรรทัดโดยไม่ออกจาก mysql


3

คำตอบสั้น ๆ : ณ ต้นปี 2014 ไม่มีวิธีที่จะอธิบายพฤติกรรมใน mysql ดูรายงานข้อผิดพลาดที่เกี่ยวข้องและหน้า dba.stackexchange ที่ 3 คนที่แตกต่างกันแสดงความคิดเห็นว่ามันยังคงไม่ได้รับการแก้ไขใน v5.5 นอกจากนี้เท่าที่ฉันสามารถบอกได้หลังจาก googling ที่ยาวนานไม่มีวิธีแก้ปัญหาที่ควรค่าแก่การใช้ คำตอบของ Andy ถูกแก้ไขเพื่อพูดถึงว่า "ดูเหมือนว่ามันจะถูกเพิ่มใน 5.0.25 (และ 5.1.10)" แต่เขาอาจเข้าใจผิดโดยความเห็นพร้อมกับวันที่ [3 พฤษภาคม 2549 19:04] ในรายงานข้อผิดพลาดดังกล่าว

--sigint ละเว้นอาร์กิวเมนต์ (ดูคำตอบของแดน Carley) จะ MySQL หยุดแน่นอนจากการลดลงคุณกลับไปยังเปลือกเมื่อคุณกด Ctrl-C แต่ยังจะเอาความสามารถในการที่จะหยุดยาวทำงานคำสั่ง

นี่คือประเภทของข้อบกพร่องในการใช้งานที่ทำให้คุณไป :-( ชัดเจนจริงๆและอาจจะง่ายมากในการแก้ไข แต่ยังอยู่ที่นี่หลังจากหลายปี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.