nohup은 자동으로 stderr를 stdout으로 리디렉션하지만 이를 터미널(진행 상황이 표시되는 곳)로 보내고 싶습니다. 어떻게 해야 하나요?
답변1
방향을 바꾸시면 됩니다. 예를 들어, stderr에 한 줄, stdout에 한 줄을 인쇄하는 다음 스크립트를 사용하세요.
#!/bin/sh
echo stderr >&2
echo stdout
지금 실행하고 nohup
표준 오류를 파일로 리디렉션하면 예상대로 작동합니다.
$ nohup a.sh 2>er
$ cat er
nohup: ignoring input and appending output to ‘nohup.out’
stderr
nohup
을 리디렉션하고 있으므로 표준 오류 자체도 포함되어 있습니다 nohup
. 표준 출력에서도 동일한 작업을 수행할 수 있습니다.
nohup a.sh > foo
기본적으로 출력을 리디렉션하지 않을 때만 nohup
사용됩니다 .nohup.out
표준 오류를 터미널에 인쇄하려면 다음을 사용할 수 있습니다.프로세스 리디렉션stderr를 통해 전달됨 tee
:
$ nohup a.sh 2> >(tee)
nohup: ignoring input and appending output to ‘nohup.out’
stderr
답변2
nohup
설명서에 따르면 :
NAME
nohup - run a command immune to hangups, with output to a non-tty
연결된 tty가 없는 명령을 실행하는 데 사용됩니다. 세션을 종료해도 명령은 계속 실행되므로 해당 출력이 tty에 연결되지 않으므로 출력이 거기에 표시될 수 없습니다. nohup
nohup.out이라는 파일을 생성합니다. 그러나 tail -f
모든 터미널에서 이 파일에 액세스하고 명령 출력을 유지할 수 있습니다.