Ctrl + C ไม่ทำงานใน gnome-terminal


9

บนโฮสต์ Linux ของฉันดูเหมือนว่าCtrl+ Cจะไม่ทำงานและฉันไม่รู้วิธีดำเนินการต่อเพื่อให้ทำงานได้ ฉันใช้ Ubuntu 10.04 กับ bash 4.1.5 (1) และทำงานใน Gnome-terminal

เมื่อฉันกดCtrl+ Cขณะที่สคริปต์นี้ทำงานมันไม่ได้ทำให้ออก

#!/bin/bash
for i in `seq 500`
do
        ps -e > /dev/null
        echo $i
done

2
คุณหมายถึงอะไรโดย“ ไม่ทำงาน”? คุณกดปุ่มนั้นคุณคาดหวังว่าจะเกิดอะไรขึ้นเกิดอะไรขึ้นจริง ๆ ?
Gilles 'หยุดชั่วร้าย'

บางทีคุณสามารถอธิบายรายละเอียดเพิ่มเติมว่าทำไมคุณคิดว่า Ctrl-C ใช้งานไม่ได้ - มีบางสิ่งในระดับเคอร์เนลที่ไม่สามารถขัดจังหวะได้ - ตัวอย่างเช่นกระบวนการที่รอการตอบกลับ (ล้มเหลว) คำตอบ NFS ไม่สามารถขัดจังหวะได้
โซเรน

ฉันปรับปรุงคำตอบของฉัน โดยทั่วไป Ctrl C ไม่ได้ยุติสคริปต์ที่ฉันคิดว่าควรยุติในการทำ Ctrl C.
Ankur Agarwal

ไม่stty -aเอาท์พุทประกอบด้วยintr=^C? คุณรันสคริปต์ได้อย่างไร
Stéphane Gimenez

1
โปรดอย่าข้ามคำถาม เลือกเว็บไซต์ที่คุณต้องการถามและปรับให้เข้ากับเว็บไซต์นั้น
nhinkle

คำตอบ:


9

ลองทำสิ่งนี้

$ stty sane

และดูว่าสามารถแก้ไขปัญหาได้หรือไม่ตรวจสอบว่า intr ตั้งค่าไว้อย่างถูกต้องโดยใช้

$ stty -a

หากคุณพบว่าintrถูกตั้งค่าเป็นสิ่งที่แตกต่างจาก ^ C คุณสามารถแก้ไขได้โดยพิมพ์

$ stty intr ^v^c

สิ่งนี้ไม่ได้ช่วย stty -a แสดง "intr = ^ C" (ไม่มีเครื่องหมายคำพูด)
Ankur Agarwal

ฉันต้องพิมพ์อักขระ ^ หรือกดปุ่ม Ctrl หรือไม่
Ankur Agarwal

คุณเพียงแค่ต้องกดปุ่ม Ctrl (^ ย่อสำหรับ Ctrl-)
Soren

บางทีคุณสามารถอธิบายรายละเอียดเพิ่มเติมว่าทำไมคุณคิดว่า Ctrl-C ใช้งานไม่ได้ - มีบางสิ่งในระดับเคอร์เนลที่ไม่สามารถขัดจังหวะได้ - ตัวอย่างเช่นกระบวนการที่รอการตอบกลับ (ล้มเหลว) คำตอบ NFS ไม่สามารถขัดจังหวะได้
โซเรน

ฉันเพิ่มรายละเอียดเพิ่มเติมในคำถามของฉัน โดยทั่วไป Ctrl C ไม่ได้ยกเลิกสคริปต์ที่ฉันใช้ซึ่งฉันคาดว่าจะถูกยกเลิกใน Ctrl C.
Ankur Agarwal

6

เนื่องจากดูเหมือนว่าการgnome-terminalกำหนดค่าที่ใช้งานไม่ได้คุณสามารถลองให้มันคืนค่าเริ่มต้นโดยใช้

mv .gconf/apps/gnome-terminal{,-BROKEN}

(คุณจะต้องเริ่มต้น Terminal ใหม่เพื่อดูผลกระทบ)

rm -rf .gconf/apps/gnome-terminal-BROKENถ้าทุกอย่างดีหลังจากนั้นทำ


4

การตั้งค่าเริ่มต้นในการgnome-terminalผูกCtrl-CและCtrl-Vปุ่มเพื่อเลียนแบบพฤติกรรมการคัดลอกและวางของ Windows มันหมายถึงการเป็นคุณสมบัติที่ไม่ได้เป็นข้อผิดพลาด :)

หากต้องการปิดใช้งานสิ่งนี้ที่ gnome-terminal

  1. นำทางไปยัง Menubar -> Edit -> Keyboard Shortcuts
  2. คลิกที่Ctrl+ ในคอลัมน์ทางลัดจนกว่าคุณจะเห็นCNew Accelerator...
  3. กดปุ่มBackspaceหรือDeleteเพื่อปิดใช้งานการเชื่อมโยงคีย์
  4. ตรวจสอบว่าDisabledตอนนี้ปรากฏในคอลัมน์คีย์ลัด

โปรดทราบว่าการเปลี่ยนแปลงนี้จะมีผลทันทีในทุก ๆ gnome-terminal

เคล็ดลับ: gnome-terminal --show-menubarจะบังคับให้ gnome-terminal แสดง Menubar หากไม่ปรากฏขึ้น


3

ฉันจะเดาได้ที่นี่: Ctrl-C ใช้งานได้ แต่เนื่องจากps -eใช้เวลานานในการรันเมื่อเทียบกับส่วนที่เหลือของสคริปต์สิ่งที่คุณทำคือส่ง SIGINT ไปยังกระบวนการ "ps" ออก "ps" และสคริปต์เลือกขึ้นพร้อมกับวนซ้ำอีกครั้งผ่านรหัสวนรอบ

ทำsleep 10ในหน้าต่างทุบตีของคุณในขณะที่มันทำงานควบคุม -C มัน ดูว่าใช้งานได้หรือไม่ ถ้าใช่ให้เรียกใช้สคริปต์ต้นฉบับของคุณและควบคุม -C หลายครั้ง ไม่ช้าก็เร็วคุณจะโชคดีและกระบวนการทุบตีที่ตีความสคริปต์จะได้รับ SIGINT


Ctrl C บน sleep 10 ไม่ทำงานเช่นกัน
Ankur Agarwal

2
ดังนั้นการใช้ gnome-terminal Ctrl C ใช้งานได้ แต่ Ctrl c ไม่ได้ ดังนั้นจะขัดจังหวะการนอนหลับ 10 ถ้าฉันทำ Ctrl + Shift + c มันทำงาน แต่การทำ Ctrl + c ไม่ทำงาน ทำไมมันเป็นกรณีที่ละเอียดอ่อน
Ankur Agarwal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.