Ngăn chặn bash hiển thị các dòng Done Done khi lệnh nền kết thúc thực thi


34

Nếu tôi chạy một lệnh trong nền với &, như thế này:

sleep 2 &

khi lệnh kết thúc, tôi nhận được "Xong". Làm thế nào tôi có thể tránh nhìn thấy thông báo "Xong"?

Câu trả lời:


34

Chạy lệnh trong một subshell:

(sleep 2 &)

xin lưu ý rằng bằng cách sử dụng điều này, bạn mất quyền kiểm soát các công việc bên trong vỏ người gọi ( jobssẽ không hiển thị gì).
mighq

36

Thực hiện vỏ tích hợp:

$ set +m

Điều này hoạt động bằng cách tắt "chế độ màn hình" để shell không báo cáo kết thúc công việc nền.

Mặc dù chạy lệnh trong một subshell như:

$ (sleep 2&)

... cũng sẽ vô hiệu hóa tin nhắn, lý do duy nhất nó hoạt động là vì chế độ màn hình được bật theo mặc định chỉ cho các vỏ tương tác. Đó là, lớp con tránh thông báo bằng cách chạy một lớp vỏ bổ sung có "set + m" tự động .


4
Một lưu ý, rằng đầu ra này không được thực hiện bởi giấc ngủ. Đó là bash shell chỉ thông báo cho bạn về công việc hoàn thành.
flolo

8

Tôi muốn làm rõ hai câu trả lời trước đó. Nếu những gì bạn muốn là không bao giờ thấy thông báo Xong từ bất kỳ lệnh nào trong trình bao của bạn, thì đó set +mlà cách để thực hiện. Chỉ cần đặt nó trong .profile và / hoặc .bashrc của bạn và được thực hiện. Lưu ý, tuy nhiên, nếu bạn gõ này:

set +m
sleep 2 &
set -m

và giấc ngủ kết thúc sau trận chung kết set -m, bạn vẫn sẽ nhận được tin nhắn đã hoàn thành.

Nếu bạn muốn vô hiệu hóa thông báo cho một lệnh gọi đơn, kỹ thuật subshell (sleep 2 &)là cách để đi.

Thành thật mà nói, tôi chỉ biết set +m, nên +1 cho Wooble vì đã khai sáng cho tôi. Tuy nhiên, điều đáng chú ý là giải pháp nào trong hai giải pháp bạn muốn phụ thuộc vào những gì bạn đang cố gắng thực hiện.


0

Nếu không có subshell , bạn có thể làm như sau:

silent_background() {
    { 2>&3 "$@"& } 3>&2 2>-
    disown &>/dev/null  # Close STD{OUT,ERR} for silence if job has already completed
}

silent_background sleep 5

Dựa trên câu trả lời này .

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.