stderr을 터미널로 보내는 동안 nohup을 사용하는 방법

stderr을 터미널로 보내는 동안 nohup을 사용하는 방법

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에 연결되지 않으므로 출력이 거기에 표시될 수 없습니다. nohupnohup.out이라는 파일을 생성합니다. 그러나 tail -f모든 터미널에서 이 파일에 액세스하고 명령 출력을 유지할 수 있습니다.

관련 정보