vô hiệu hóa kiểm soát công việc trong bash (CTRL-Z)


12

Đôi khi điều đó xảy ra với tôi, rằng tôi nhấn CTRL+ một Zcách tình cờ và ứng dụng của tôi biến mất vào nền. Tôi biết, tôi có thể mang nó trở lại fg, vì vậy nó không phải là một vấn đề lớn. Nhưng tôi đang tự hỏi về việc tắt cái này job controlđi. Trong cả cuộc đời tôi, tôi không thể nhớ một ví dụ khi tôi cần nó, nó chỉ xem tôi như một di tích hình thành quá khứ.

Điều này có ổn để vô hiệu hóa job controlhoàn toàn không? Hoặc tôi đang thiếu một cái gì đó, và tính năng này có thể hữu ích? Làm thế nào tôi có thể vô hiệu hóa nó trong.bashrc

CẬP NHẬT:

Tôi đã thử set +mtheo đề xuất của @Falsenames. Tuy nhiên, điều này chỉ hoạt động khi tôi gõ nó trong thiết bị đầu cuối. Thêm set +mvào của tôi .bashrckhông có hiệu lực.


1
Cập nhật lại: Thực tế là $-(danh sách các tùy chọn hoạt động) không còn chứa mkhi bạn đặt set +mtrong ~/.bashrcgợi ý rằng Bash đang cố gắng tắt kiểm soát công việc, nhưng cuối cùng không làm như vậy vì lỗi - có thể đáng báo cáo qua bug-bash@gnu.org
mkuity0

Câu trả lời:


8

Bạn có thể thêm dòng sau vào dòng lệnh của mình để dừng sử dụng chế độ giám sát.

đặt + m

Nếu bạn thực sự cần chức năng ctrl-z sau này, bạn chỉ cần nhập 'set -m' để bật giám sát cho phiên đó.

Từ người đàn ông bash . Lưu ý rằng đây là cho '-m', với "+ m" chuyển đổi cài đặt đó thành tắt.

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. 

Như một nỗ lực cuối cùng, bạn có thể muốn biên dịch thủ công một phiên bản bash mà không có cờ "--enable-job-control". Đây là một hướng dẫn cài đặt nhanh từ GNU. Nếu bạn chọn đi tuyến đường này, KHÔNG thay thế / bin / bash chỉ trong trường hợp các quy trình nền chạy qua bash mong muốn kiểm soát công việc. Thay vào đó, hãy tạo /bin/bash.alt hoặc một tệp khác. Shell mặc định của bạn có thể được thay đổi thành cái thay thế này bằng cách chạy usermod hoặc chỉnh sửa / etc / passwd với quyền root.


set +mhoạt động trong thiết bị đầu cuối, nhưng khi tôi thêm nó vào .bashrc, nó không có hiệu lực.
Martin Vegter

À, bạn nói đúng. Đó là bản địa hóa cho kịch bản cụ thể tại thời điểm đó. Sau đó, bash khẳng định mặc định của nó.
Falsenames

biên dịch bash của riêng tôi có vẻ là một cái giá khá cao để trả cho việc vô hiệu hóa kiểm soát công việc. Phải có một số cài đặt hoạt động thông qua .bashrc.
Martin Vegter

Vì tất cả được đặt ở thời gian biên dịch, nên không cần thiết phải thay đổi nó trong tệp thiết lập tải sau khi trình bao bắt đầu chạy. Vấn đề ở đây là ai đó đã quyết định biên dịch bash VỚI điều khiển công việc được bật làm mặc định cho bản phân phối bạn đang sử dụng. Cá nhân tôi không thể tranh luận về điều đó, vì tôi sử dụng nhiều biện pháp kiểm soát công việc khác nhau mỗi ngày tại nơi làm việc và tôi không chắc mình có thể dễ dàng điều chỉnh cuộc sống mà không có nó. Cấp, đó là kinh nghiệm của tôi, không phải của bạn ... đây là lý do tại sao có các cờ trên biên dịch, để đưa ra các tùy chọn.
Falsenames

4

stty susp undefsẽ vô hiệu hóa tín hiệu tạm dừng do bàn phím khởi tạo cho hầu hết các chương trình, tuy nhiên các lệnh như vimemacscó các ràng buộc cụ thể Ctrl-Zsẽ phải được cấu hình lại riêng lẻ.

Bạn có thể thêm lệnh stty đó vào ~/.bash_profilehoặc ~/.profile, đăng xuất, đăng nhập lại.


Điều này thực sự hoạt động cho một số chương trình. Nhưng ví dụ cho mcnó không hoạt động. Mà về cơ bản xác nhận những gì bạn nói. Không có giải pháp phổ quát nào phù hợp với tất cả?
Martin Vegter

Tôi chỉ nhận thấy, set +mhoạt động cho mc, nhưng chỉ khi tôi gõ nó trong thiết bị đầu cuối, không phải trong .bashrchoặc .profile.
Martin Vegter

3

Hoặc tôi đang thiếu một cái gì đó, và tính năng này có thể hữu ích?

Để trả lời phần này của câu hỏi: Cz / fgcombo là điều cần thiết cho quy trình làm việc vim của tôi. Ví dụ, tôi thích Cz> git commit> fgđể sử dụng giấy gói git từ bên trong vim.

Cz giúp xử lý shell như IDE, tuân thủ nguyên tắc " làm một việc ". (Điều này thay vì "trình soạn thảo như IDE").


1
^Zvẫn hoàn toàn hữu ích - nhưng nó thậm chí còn hữu ích hơn khi thiết bị đầu cuối không phải là cửa sổ, mà là một hộp trước mặt bạn. Và bạn chỉ có một.
Volker Siegel

2

Thêm trap "" SIGTSTPvào kịch bản của bạn. Nó sẽ bắt tín hiệu và bỏ qua nó.

#!/bin/bash
trap "" SIGTSTP
watch date
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.