มีวิธีใดบ้างที่จะลบ^C
เมื่อคุณกดCTRL+ Cในเชลล์รวมกับ Red Hat Enterprise Linux 6 ("Santiago")? .bash_profile
ฉันมีสิทธิ์ในการแก้ไขของตัวเอง
มีวิธีใดบ้างที่จะลบ^C
เมื่อคุณกดCTRL+ Cในเชลล์รวมกับ Red Hat Enterprise Linux 6 ("Santiago")? .bash_profile
ฉันมีสิทธิ์ในการแก้ไขของตัวเอง
คำตอบ:
แก้ไข (หรือสร้าง) ~/.inputrc
ไฟล์ของคุณ เพิ่มบรรทัดว่า
set echo-control-characters Off
สิ่งนี้จะแนะนำไลบรารี GNU Readline (ซึ่ง Bash ใช้) เพื่อไม่ให้เอาต์พุต (echo) อักขระควบคุมใด ๆ บนหน้าจอ การตั้งค่าจะใช้งานได้ในเซสชัน Bash ใหม่ทั้งหมดหลังจากนั้น (และในยูทิลิตี้อื่น ๆ ที่ใช้ไลบรารี Readline)
โปรดสังเกตว่าหากระบบ Unix ของคุณมาพร้อมกับไฟล์กำหนดค่าทั้งระบบสำหรับไลบรารี Readline (โดยปกติ/etc/inputrc
) ไฟล์กำหนดค่าส่วนบุคคลของคุณจะต้องรวมไฟล์นั้น:
$include /etc/inputrc
set echo-control-characters Off
อีกทางเลือกหนึ่งคือการทำสำเนาส่วนบุคคลของไฟล์การกำหนดค่าทั้งระบบแล้วปรับเปลี่ยนที่
sleep 180
และกด CTRL + C
~/.inputrc
ไม่มีอยู่แล้วเพียงแค่สร้างไฟล์อาจสูญเสียการตั้งค่าที่มีอยู่ ในกรณีของฉันฉันแรกพบว่า ctrl + ซ้ายและ ctrl + ขวาหยุดทำงาน การแก้ไขคือการเริ่มต้น~/.inputrc
ด้วยบรรทัด$include /etc/inputrc
นี้ นอกจากนี้ยังสามารถcp /etc/inputrc .inputrc
แก้ไขและแก้ไขได้ตามต้องการ
ลองทำสิ่งต่อไปนี้:
stty -echoctl
สำหรับคำอธิบายดูโพสต์นี้ดีและมีรายละเอียดจากStéphane Chazelasซึ่งยังได้อธิบายถึงอื่น ๆ บางstty
คุณสมบัติ
หากคุณต้องการที่จะทำให้เกิดการเปลี่ยนแปลงที่ถาวร (และคุณใช้bash
เป็นนัยในคำถามของคุณ) แล้วมันจะดีที่สุดที่จะใส่ลงไปในของคุณ.bashrc
ตามที่ระบุไว้โดยjlmgในการแสดงความคิดเห็น (ดังนั้นจึงนำไปใช้กับเปลือกหอยโต้ตอบทั้งหมด)
.bash_profile
เป็นไฟล์ที่จะแยกวิเคราะห์โดยเปลือกเข้าสู่ระบบเท่านั้น ควรใส่.bashrc
แทนดังนั้นจึงเป็นการอ่านโดยการเรียกใช้แบบโต้ตอบทั้งหมด
^[[A
stty -echo
เช่นกัน แน่นอนว่าเป็นไปเพื่อป้องกันการสะท้อนของทุกอย่างอื่นเช่นกันซึ่งอาจทำให้คำตอบนี้ไม่มีไปถ้าสิ่งที่คุณต้องการก็คือการซ่อน^C
s
^C
จบในตอนท้ายฉันอาจเห็นด้วยกับคุณ แต่^C
จะพิมพ์ออกมาเมื่อเคอร์เซอร์อยู่ซึ่งสามารถเขียนทับอักขระได้ทุกที่ในคำสั่ง ซึ่งหมายความว่าหากคุณต้องการคัดลอกส่วนของคำสั่งนั้นคุณอาจพบบางสิ่งที่ยุ่งเหยิง และ^C
ไม่ได้รับการยอมรับอย่างง่ายดายเมื่อมองไปที่เทอร์มินัลราวกับว่ามันเป็นถ้ามันอยู่ที่ส่วนท้ายของคำสั่ง
หากคุณกำลังพยายามหาการกำหนดค่าที่จะอนุญาตให้มีการสะท้อนปกติ (รวมถึงechoctl
) และเพียงแค่ปิดเสียงสะท้อนของตัวละครที่สร้างสัญญาณและคุณแน่ใจว่ามันควรจะเป็นไปได้เพราะคุณเคยเห็นมันทำงานมาก่อน ...
คุณอาจเคยเห็นมันเป็นอย่างนั้น แต่มันเป็นไปไม่ได้อีกแล้วเนื่องจากการกระทำนี้ :
กระทำ ec5b1157f8e819c72fc93aa6d2d5117c08cdc961
เปิด INTR / QUIT / SUSP echoing ในระเบียบของบรรทัด N_TTY (เช่น ctrl-C จะปรากฏเป็น "^ C" หาก stty echoctl ถูกตั้งค่าและ ctrl-C ถูกตั้งค่าเป็น INTR)
Linux ดูเหมือนจะเป็นระบบปฏิบัติการยูนิกซ์ที่เหมือนระบบเดียว (เมื่อเร็ว ๆ นี้ฉันตรวจสอบสิ่งนี้บน Solaris, BSD, และ Mac OS X) ซึ่งไม่ทำงานในลักษณะนี้และฉันพลาดสิ่งนี้เพราะเป็นการยืนยันภาพที่ดีของการขัดจังหวะโปรแกรม ในคอนโซลหรือ xterm ฉันจำสิ่งนี้ได้ด้วยความรักจาก Unixs ที่ฉันเคยใช้มาหลายปีเช่นกัน การนำสิ่งนี้ไปใช้กับลีนุกซ์ดูเหมือนจะเป็นวิธีที่ดีที่จะทำให้มันเข้ากันได้กับพฤติกรรมที่เหมือนยูนิกซ์มาตรฐานมากกว่า
ถ้าคุณจำความรักวิธีการลินุกซ์ที่ใช้ในการไม่ได้สะท้อนว่า^C
วิธีเดียวที่จะได้รับกลับมาพฤติกรรมเก่าคือการแก้ไขเคอร์เนลของคุณ ในรุ่นที่ผ่านมาสะท้อนของสัญญาณสร้างตัวละครที่เส้น 1215-1218 ของไดรเวอร์ / TTY / n_tty.c
set echo-control-characters off