nohup을 사용하고 하나의 명령으로 tail하는 방법

nohup을 사용하고 하나의 명령으로 tail하는 방법

바꾸다:

  nohup ./script.sh &
  tail -f nohup.out

나하고 싶어:

nohup ./script.sh &; tail -f nohup.out

하지만 nohup을 호출한 후 엔터를 눌러야 하기 때문에 동작하지 않습니다.

답변1

bash, dash및 에서는 명령줄을 종료하므로 pdksh다음 이 수행되지 않습니다.&nohup ./script.sh;

그걸로 ;당신은 얻을 것이다

bash: syntax error near unexpected token `;'

;명령을 개별적으로 실행하려고 하면 얻을 수 있는 것과 같습니다.

귀하의 명령 ksh93에 따르면 zsh잘 작동합니다.

다른 셸 의 경우 bash다음을 수행합니다.

$ nohup ./script.sh & tail -f nohup.out

그러나 파이프라인을 실행할 때와 마찬가지로 파이프라인의 여러 부분이 (거의) 동시에 시작됩니다. tail파일이 존재하기 전에 시작되면 다음 nohup.out과 같은 오류로 인해 실패합니다.

tail: nohup.out: No such file or directory 

이 문제를 해결하려면:

$ nohup ./script.sh & sleep 1 && tail -f nohup.out

또는 기다리는 것을 좋아하지 않는 경우:

$ nohup ./script.sh & while ! test -f nohup.out; do :; done && tail -f nohup.out

또는 아래 댓글에서 "VPfB"가 지적했듯이,

$ nohup ./script.sh >output & tail -f output

답변2

nohup을 실행하기 전에 Enter 키를 시뮬레이션합니다.

echo -e "\n" | nohup ./script.sh & tail -f nohup.out

예시 스크립트:

[$]› cat tmp1.sh
#!/bin/bash
for i in {1..10}; do echo $i; sleep 1; done

결과:

[$]› echo -e "\n" | nohup ./tmp1.sh & tail -f nohup.out
[3] 25402
nohup: appending output to 'nohup.out'
1
2
3
4
5
6
7
8
9
10

[3]   Done                    echo -e "\n" | nohup ./tmp1.sh

답변3

문제를 재현할 수 없습니다. "&;"는 오류일 수 있습니다.

nohup ./script.sh & tail -f nohup.out

그러나 tail이 시작하기에 너무 빠른 경우:

nohup ./script.sh & sleep 1 ; tail -f nohup.out

관련 정보