백그라운드에서 쉘 스크립트를 실행하고 출력을 얻는 방법


111

두 개의 쉘 스크립트 a.shb.sh. In a.shb.sh나는 무한 for 루프를 가지고 있으며 터미널에 일부 출력을 인쇄합니다. 둘 다 호출하는 또 다른 스크립트를 작성 a.sh하고 b.sh싶지만 스크립트가 무한히 실행되는 대신 사용자가 즉시 터미널 제어권을 다시 얻고 터미널에서 출력을 숨기고 싶습니다.

답변:


220

를 사용 nohup하여 백그라운드 작업 완료하는 데 시간이 오래 걸리는 경우 또는 서버에 로그인처럼 그냥있는 SecureCRT 또는 무언가를 사용합니다.

출력을 무시 하려면 stdoutstderr/dev/null로 리디렉션하십시오 .

nohup /path/to/your/script.sh > /dev/null 2>&1 &

추가하기 위해 때로는 스크립트에 대한 인수가 있으며 위의 명령은 Ambiguous output redirect를 반환 합니다.
sabertooth1990

내가 찾은 더 나은 방법은 nohup /path/to/your/script.sh parameter1 > & 1 &누군가가 더 나은 방법을 알고 있다면 사용 하는 것입니다.
sabertooth1990

17
이미 모든 STDOUT 및 STDERR 스트림을 nohup.out 파일에 자동으로 추가하므로 /dev/null 2>&1사용중인 경우 에는 필요하지 않습니다 nohup. 사용 :nohup /path/to/your/command &
Leonardo

1
@ sabertooth1990 명령 줄에 결함이 있습니다.-bash: syntax error near unexpected token '&'
notes-jj

1
그런 다음 생성 된 프로세스를 어떻게 종료합니까?
Alexis_A

32

다음과 같은 파일로 출력을 리디렉션합니다.

./a.sh > somefile 2>&1 &

이렇게하면 stdout과 stderr가 모두 동일한 파일로 리디렉션됩니다. stdout 및 stderr을 두 개의 다른 파일로 리디렉션하려면 다음을 사용하십시오.

./a.sh > stdoutfile 2> stderrfile &

/dev/nullstdout 및 / 또는 stderr에 신경 쓰지 않으면 파일 중 하나 또는 둘 모두로 사용할 수 있습니다 .

리디렉션에 대한 자세한 내용은 bash 맨 페이지 를 참조하십시오 .


23

죄송이 조금 늦었하지만 때문에 어디 당신이 (신용를 표준 또는 오류 출력을 원하지 않는 somple 명령을위한 이상적인 솔루션을 발견 http://felixmilea.com/2014/12/running-bash-commands-background -제대로 / )

그러면 출력이 null로 리디렉션되고 화면이 깨끗하게 유지됩니다.

command &>/dev/null &

2
참고 : 터미널이 닫히면 명령이 종료됩니다.
Banana.

1
세션이 끝난 후에도 명령을 계속 실행할 수있는 솔루션을 원하는 사람이라면 screen 또는 tmux를 제안합니다. 초기 세션을 닫은 후에도 계속되는 '세션 내 세션'을 실행해야합니다. 그런 다음 다시 로그인하면 진행중인 세션에 다시 연결할 수 있습니다. 예를 들어 동기화를 오랫동안 실행해야하고 세션을 계속 실행하고 싶지 않은 경우 rsync 백업을 실행하는 데 적합합니다.
DanteAlighieri

13

다음을 포함하는 스크립트와 동일한 디렉토리에있는 경우 :

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

&말에 백그라운드에서 실행되는 스크립트를 만드는 것입니다.

> /dev/null 2>&1부분은 필요하지 않습니다. stdout 및 stderr 스트림을 리디렉션하므로 출력이 많은 시끄러운 스크립트에 대해 수행 할 수있는 터미널에서 볼 필요가 없습니다.


7

알림을 제거하고 STDOUT 및 STDERR을 닫으려면 서브 쉘에서 실행하십시오.

(&>/dev/null script.sh &)

이것은 또한 [1] + 54765 done <emacs>감사 로 백그라운드 작업 로그를 인쇄하지 않는 유일한 답변입니다
alper

2

리눅스 킥 스타트에서 스크립트를 실행하려면 아래와 같이 실행해야합니다.

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &


0

다음 예제는 잘 작동합니다.

nohup sh prog.sh proglog.log 2> & 1 &

For 루프는 다음과 같이 사용할 수 있습니다.

for i in {1..10}; sh prog.sh 수행; 수면 1; 완료 prog.log 2> & 1 &

백그라운드에서 작동하며 출력을 표시하지 않습니다.

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