ปิดใช้งานการควบคุมงานใน bash (CTRL-Z)


12

มันเกิดขึ้นกับฉันในบางครั้งฉันกดCTRL+ Zโดยไม่ตั้งใจและใบสมัครของฉันหายไปเป็นพื้นหลัง ฉันรู้ว่าฉันสามารถนำมันกลับมาได้fgดังนั้นจึงไม่ใช่เรื่องใหญ่อะไร แต่ฉันสงสัยเกี่ยวกับการjob controlปิดเครื่องนี้อยู่ดี ในชีวิตทั้งชีวิตของฉันฉันไม่สามารถจำหนึ่งครั้งเมื่อฉันต้องการมันก็แค่ดูเหมือนว่าฉันเป็นรูปแบบที่ระลึกในอดีต

ตกลงเพื่อปิดใช้งานjob controlทั้งหมดหรือไม่ หรือฉันกำลังพลาดบางสิ่งบางอย่างและคุณสมบัตินี้มีประโยชน์หรือไม่ ฉันจะปิดการใช้งานในฉันได้อย่างไร.bashrc

UPDATE:

ฉันได้ลองset +mตามที่ @Falsenames แนะนำแล้ว อย่างไรก็ตามสิ่งนี้ใช้ได้เฉพาะเมื่อฉันพิมพ์ในเทอร์มินัล การเพิ่มset +mเข้าไปในของฉัน.bashrcไม่มีผล


1
เรื่องการปรับปรุง: ความจริงที่ว่า$-(รายการของตัวเลือกใช้งาน) ไม่ได้มีmเมื่อคุณวางset +mในของคุณ~/.bashrcแสดงให้เห็นว่ามีการทุบตีพยายามที่จะเปิดการควบคุมงานออก แต่ในท้ายที่สุดไม่ได้ทำเช่นนั้นเพราะของข้อผิดพลาด - อาจจะมีมูลค่าการรายงานผ่านทาง bug-bash@gnu.org
mklement0

คำตอบ:


8

คุณสามารถเพิ่มสิ่งต่อไปนี้ในบรรทัดคำสั่งของคุณเพื่อหยุดใช้โหมดการตรวจสอบ

set + m

หากคุณต้องการฟังก์ชั่น ctrl-z จริงๆในภายหลังคุณสามารถพิมพ์ 'set -m' เพื่อเปิดใช้งานการตรวจสอบสำหรับเซสชันนั้น

จากคนทุบตี โปรดทราบว่านี่ใช้สำหรับ '-m' โดยใช้ "+ m" เพื่อสลับการตั้งค่าให้ปิดใช้งาน

set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] 
....
-m
    Monitor mode. Job control is enabled. This option is on by default for interactive
    shells on systems that support it (see JOB CONTROL above). Background processes 
    run in a separate process group and a line containing their exit status is printed
    upon their completion. 

เป็นความพยายามครั้งสุดท้ายคุณอาจต้องการรวบรวมเวอร์ชันของ bash ด้วยตนเองโดยไม่ต้องตั้งค่าสถานะ "--enable-job-control" นี่คือคำแนะนำการติดตั้งอย่างรวดเร็วจาก GNU หากคุณเลือกที่จะใช้เส้นทางนี้ห้ามเปลี่ยน / bin / bash ในกรณีที่กระบวนการส่วนหลังรันผ่าน bash คาดว่าจะมีการควบคุมงาน ให้สร้าง /bin/bash.alt หรือไฟล์อื่นแทน เชลล์เริ่มต้นของคุณสามารถเปลี่ยนเป็นเชลล์สำรองนี้ได้โดยใช้ usermod หรือแก้ไข / etc / passwd เป็นรูท


set +mใช้งานได้ในเทอร์มินัล แต่เมื่อฉันเพิ่มลงในของฉัน.bashrcมันไม่มีผล
Martin Vegter

อ่าคุณพูดถูก ซึ่งแปลเป็นสคริปต์เฉพาะที่จุดนั้น จากนั้นทุบตียืนยันค่าเริ่มต้นใน
Falsenames

การรวบรวมทุบตีของฉันเองดูเหมือนว่าจะมีราคาสูงมากสำหรับการปิดการใช้งานการควบคุมงาน .bashrcจะต้องมีการตั้งค่าบางอย่างที่ทำงานผ่านทาง
Martin Vegter

เนื่องจากนี่เป็นการตั้งค่าทั้งหมดในเวลาคอมไพล์จึงไม่จำเป็นต้องมีวิธีการเปลี่ยนแปลงในไฟล์ติดตั้งที่โหลดหลังจากเชลล์เริ่มทำงาน ปัญหาที่นี่คือมีคนตัดสินใจรวบรวม bash เมื่อเปิดใช้งานการควบคุมงานเป็นค่าเริ่มต้นสำหรับ distro ที่คุณกำลังใช้ ฉันไม่สามารถทะเลาะกันเป็นการส่วนตัวได้เพราะฉันใช้การควบคุมงานที่หลากหลายทุกวันในที่ทำงานและฉันไม่แน่ใจว่าฉันจะสามารถปรับตัวเข้ากับชีวิตได้ง่ายหากปราศจากมัน ได้รับนั่นคือประสบการณ์ของฉันไม่ใช่ของคุณ ... นี่คือเหตุผลว่าทำไมจึงมีการรวบรวมธงเพื่อให้ตัวเลือก
Falsenames

4

stty susp undefจะปิดใช้งานสัญญาณหยุดชั่วคราวที่เริ่มต้นด้วยแป้นพิมพ์สำหรับโปรแกรมส่วนใหญ่อย่างไรก็ตามคำสั่งเช่นนั้นvimและemacsที่มีการผูกเฉพาะCtrl-Zจะต้องได้รับการกำหนดค่าใหม่ทีละรายการ

คุณสามารถเพิ่มคำสั่ง stty นั้นในของคุณ~/.bash_profileหรือ~/.profileออกจากระบบเข้าสู่ระบบอีกครั้ง


ใช้งานได้จริงสำหรับบางโปรแกรม แต่สำหรับตัวอย่างmcมันไม่ทำงาน ซึ่งโดยทั่วไปยืนยันสิ่งที่คุณพูด ไม่มีทางออกที่เป็นสากลสำหรับทุกคนหรือไม่?
Martin Vegter

ฉันเพิ่งสังเกตเห็นset +mผลงานmcแต่ถ้าผมพิมพ์ใน terminal, ไม่ได้อยู่ในหรือ.bashrc .profile
Martin Vegter

3

หรือฉันกำลังพลาดบางสิ่งบางอย่างและคุณสมบัตินี้มีประโยชน์หรือไม่

ในการตอบคำถามส่วนนี้: Cz / fgcombo เป็นสิ่งจำเป็นสำหรับเวิร์กโฟลว์ vim ของฉัน ตัวอย่างเช่นฉันชอบ Cz git commit>> fgเพื่อใช้ git wrappers จากในกลุ่ม

Cz ช่วยในการรักษาเชลล์ในฐานะ IDE โดยสอดคล้องกับหลักการ " ทำสิ่งหนึ่ง " (นี่แทน "editor เป็น IDE")


1
^Zยังคงมีประโยชน์อย่างแน่นอน - แต่มันมีประโยชน์มากกว่าเมื่อเทอร์มินัลไม่ใช่หน้าต่าง แต่มีกล่องอยู่ข้างหน้าคุณ และคุณมีเพียงหนึ่งเดียว
Volker Siegel

2

เพิ่มtrap "" SIGTSTPในสคริปต์ของคุณ มันจะจับสัญญาณและเพิกเฉย

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