백그라운드 명령 실행이 완료되면 bash에 "완료"가 표시되지 않도록 방지


34

&같이 백그라운드에서 명령을 실행 하면 다음과 같이됩니다.

sleep 2 &

명령이 완료되면 "완료"가 표시됩니다. "완료"메시지가 표시되지 않게하려면 어떻게합니까?

답변:


34

서브 쉘에서 명령을 실행하십시오.

(sleep 2 &)

이것을 사용하면 호출자 쉘 내부의 작업을 느슨하게 제어 할 수 있습니다 ( jobs아무것도 표시하지 않음).
mighq

36

쉘 내장을 실행하십시오.

$ set +m

"모니터 모드"를 끄면 쉘이 백그라운드 작업 종료를보고하지 않습니다.

다음과 같은 서브 쉘에서 명령을 실행하지만 :

$ (sleep 2&)

... 것 또한 모니터 모드 만 대화 형 쉘에 대해 기본적으로 활성화되어 있기 때문에 메시지를 해제, 그것이 작동하는 유일한 이유입니다. 즉, 서브 쉘은 자동 "set + m" 을 가진 추가 쉘을 실행하여 메시지를 피합니다 .


4
이 출력은 슬립에 의해 수행되지 않습니다. 완료된 백그라운드 작업에 대해 알려주는 bash 쉘입니다.
flolo

8

두 가지 초기 답변을 명확히하고 싶습니다. 원하는 것이 쉘의 명령에서 완료 메시지를 보지 못하는 경우 set +m갈 길입니다. .profile 및 / 또는 .bashrc에 넣고 끝내십시오. 그러나 다음을 입력하면 :

set +m
sleep 2 &
set -m

그리고 마지막이 끝난 후 수면이 끝나면 set -m여전히 완료 메시지가 표시됩니다.

단일 명령 호출에 대해 메시지를 사용하지 않으려면 서브 쉘 기술 (sleep 2 &)이 사용됩니다.

정직하게, 나는에 대해서만 알았 set +m으므로 나를 깨우 게 된 Wooble에게 +1했습니다. 그러나 원하는 두 가지 솔루션 중 하나가 수행하려는 작업에 따라 달라집니다.


0

서브 쉘이 없으면 다음을 수행 할 수 있습니다.

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

이 답변을 기반으로 합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.