CTRL + C ไม่ถูกต้องที่จะใช้เพื่อกลับไปที่บรรทัดคำสั่งหรือไม่


27

เมื่อฉันใช้และฉันต้องการที่จะกลับไปยังเปลือกฉันมักจะใช้tail -f CTRL+Cหรือเมื่อฉันพิมพ์คำสั่งและรู้สึกอยากจะยกเลิกและเริ่มต้นใหม่ฉันแค่CTRL+Cกลับไปที่พรอมต์บรรทัดคำสั่งที่ว่างเปล่า นี่ถือว่าเป็นการปฏิบัติที่ไม่ดีหรือไม่? บางครั้งฉันรู้สึกว่าอาจจะมีวิธีที่ดีกว่าในการแยกตัวออกจากบางสิ่ง แต่จริงๆแล้วก็ไม่มีความคิด


6
หากต้องการยกเลิกคำสั่งเชลล์ที่ป้อนเพียงบางส่วนคุณสามารถใช้ Control-U หรือ Delete (ขึ้นอยู่กับการตั้งค่า tty และการผูกคีย์) แต่ไม่มีอะไรผิดปกติในการใช้ Control-C
Keith Thompson

@KeithThompson ขอบคุณสำหรับ Ctrl + U, ฉันไม่ได้ตระหนักถึงว่าหนึ่ง :-)
แพทริค

สำหรับเร็กคอร์ด Cu ไม่ได้ยกเลิกคำสั่งที่ป้อนจริง ๆมันจะย้ายไปยังบัฟเฟอร์การวาง (คล้ายกับฟังก์ชัน "ตัด" ของบางโปรแกรม)
Chris Down

คำตอบ:


36

Ctrl+ Cส่ง SIGINT ไปยังโปรแกรม สิ่งนี้จะบอกโปรแกรมที่คุณต้องการขัดจังหวะ (และจบ) กระบวนการของมัน โปรแกรมส่วนใหญ่จะจับสิ่งนี้ได้อย่างถูกต้องและออกจากโปรแกรมอย่างหมดจด ดังนั้นใช่นี่เป็นวิธีที่ "ถูกต้อง" ในการจบโปรแกรมส่วนใหญ่

มีแป้นพิมพ์ลัดอื่น ๆ สำหรับส่งสัญญาณอื่น ๆ ไปยังโปรแกรม แต่นี่เป็นวิธีที่ใช้กันโดยทั่วไป


9
นอกจากนี้ยังมี Ctrl + D สำหรับโปรแกรมที่กำลังอ่านอินพุตจากผู้ใช้ Ctrl + D ปิด STDIN กับโปรแกรม สำหรับการออกจากเชลล์อย่างสวยงามสามารถใช้งานได้ (เช่นเดียวกับการพิมพ์ exit)
Patrick

2
@Patrick Ctrl + D ส่งตัวบ่งชี้ End of File ไปยังสตรีมจริง ๆ มันขึ้นอยู่กับโปรแกรมที่จะตอบสนองอย่างเหมาะสม (โดยปกติแล้วจะปิดสตรีมไฟล์)
คริส S

นั่นคือสิ่งที่ปิด STDIN คุณไม่สามารถรับ EOF ได้โดยไม่ต้องปิด pipe / stream
แพทริค

9
ผิดสามครั้งแพทริค ครั้งแรก: การควบคุม + D ไม่มีความหมายนี้สำหรับท่อ ประการที่สอง: ตัวละครพิเศษ EOF ไม่ได้ปิดอะไรเลย มันทำให้ผลตอบแทนเป็นศูนย์ครั้งเดียว (สมมติว่าบัฟเฟอร์บรรทัดว่างเปล่า) จากการread()เรียกระบบปัจจุบัน read()s ถัดไปไม่ได้รับผลกระทบ ที่สาม: ไม่มีการนี้จะนำไปใช้กับโปรแกรมที่วางวินัยสายเข้าสู่โหมดที่ไม่เป็นที่ยอมรับเช่นโปรแกรมส่วนใหญ่เปลือกจากคู่ที่ผ่านมาหลายสิบปีและแน่นอนโปรแกรมอื่น ๆ ที่ใช้ห้องสมุดเช่น readlineGNU
JdeBP


11

หากต้องการยกเลิกคำสั่งยาวขณะพิมพ์บางครั้งฉันข้ามไปที่จุดเริ่มต้นของบรรทัดและใส่เครื่องหมายความคิดเห็นก่อนกดปุ่ม Enter:

Home#Enter

Pos1#Return

สิ่งนี้มีประโยชน์ถ้าฉันพิมพ์คำสั่ง copy ด้วยพา ธ ที่ยาวตัวอย่างเช่นในขณะเดียวกันสังเกตว่าฉันต้องสร้างไดเรกทอรี แต่ต้องการทำซ้ำคำสั่งในภายหลัง จากนั้นฉันก็ต้องเอามันออกมาจากประวัติลบแฮชและป้อน

ใน Bash คุณสามารถใช้ทางลัด

Alt+#

เพื่อสังเกตคำสั่งของคุณตามที่ระบุไว้ในความคิดเห็น (ขอบคุณ @Zorawar)


6
คุณยังสามารถใช้งานได้Ctrl-Aโดยไม่ต้องละนิ้วออกจากแถวบ้าน
Dietrich Epp

1
และCtrl-Eไปถึงจุดสิ้นสุดโดยวิธี
เดฟ

@Dave: ถูกต้อง แต่คุณไม่จำเป็นต้องย้ายไปยังจุดสิ้นสุดเพื่อกด Enter เพื่อยืนยันคำสั่งของคุณ commandline ไม่ใช่ตัวแก้ไขซึ่งอาจแทรกขึ้นบรรทัดใหม่
ผู้ใช้ที่ไม่รู้จัก

2
ในทุบตีคุณสามารถบรรลุสิ่งเดียวกันโดยเพียงแค่กดAlt-#: มันจะใส่ความคิดเห็นและเรียกใช้คำสั่ง (ดังนั้นใส่ไว้ในประวัติของคุณ)
Zorawar

8

โดยทั่วไปแล้วการใช้Ctrl+ Cจะใช้ได้เมื่อโปรแกรมเสนอวิธีที่ไม่มีการโต้ตอบให้คุณยกเลิก (ไม่ว่าจะโดยการออกแบบหรือบ่อยกว่านั้นเพราะมันค้างหรือไม่สามารถใช้งานได้) เพียงจำไว้ว่าเมื่ออยู่ในโหมดโต้ตอบชุดคำสั่งผสมที่คุณต้องการจริงๆอาจเป็นCtrl+ Dซึ่งจะส่งEOFสัญญาณการส่งสัญญาณที่จุดสิ้นสุดของอินพุต


1

หากใช้ Bash คุณสามารถใช้Ctrl- Zและพิมพ์bgเพื่อ "วางงานปัจจุบันเป็นพื้นหลัง"


0

ในฐานะ @Patrick กล่าวในความคิดเห็นเกี่ยวกับคำตอบที่ยอมรับ

นอกจากนี้ยังมีCtrl+Dโปรแกรมที่กำลังอ่านอินพุตจากผู้ใช้ Ctrl+Dปิด STDIN กับโปรแกรม

สิ่งนี้ช่วยฉันได้เมื่อCtrl+Cไม่ได้รับบรรทัดคำสั่งกลับมาหลังจากใช้งาน>>

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