Câu trả lời:
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 .
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 +m
là 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.
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 .
jobs
sẽ không hiển thị gì).