![nohup 및 파이프라인으로 리디렉션된 파일 문제](https://linux55.com/image/31799/nohup%20%EB%B0%8F%20%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8%EC%9C%BC%EB%A1%9C%20%EB%A6%AC%EB%94%94%EB%A0%89%EC%85%98%EB%90%9C%20%ED%8C%8C%EC%9D%BC%20%EB%AC%B8%EC%A0%9C.png)
다음 명령의 경우:
ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &"'
항상 다음과 같은 오류 메시지가 나타납니다.
nohup: ignoring input and appending output to `nohup.out'
왜 이런 일이 발생하며 이 오류 메시지를 방지하는 방법은 무엇입니까?
또한 아래(화면과 파일로 출력을 활성화하는 데 사용함)는 다음과 같습니다.
stdbuf -o 0 command|& tee logfile
&
그것은 무엇을 위해 사용됩니까?
답변1
실행 중인 명령이 nohup
stdout 또는 stderr에 쓰지 않고 입력을 보내지 않는 경우가 있습니다. 하지만 nohup
이를 알 수 있는 방법이 없으므로 모든 입력이 삭제되고 모든 출력이 기록된다는 것을 알려줍니다 nohup.out
.
이를 방지하려면 nohup
stdin, stdout 및 stderr을 /dev/null
.
ssh -t esolve@hostname 'sudo nohup bash -c "ls > log 2>&1 &" </dev/null >/dev/null 2>/dev/null'
에 관해서는 |&
, 부터배쉬 매뉴얼:
파이프의 형식은 다음과 같습니다.
[time [-p]] [!] command1 [ [| or |&] command2 …]
파이프라인의 각 명령 출력은 다음 명령의 입력으로 파이프됩니다. 즉, 각 명령은 이전 명령의 출력을 읽습니다. 이 연결은 명령으로 지정된 리디렉션 전에 수행됩니다.
사용되는 경우
|&
표준 오류는 표준command1
입력으로 연결됩니다 .command2
2>&1 |
이것은 zsh에도 존재하는 bash 확장입니다.