Ubuntu Linux Bash에서 원격으로 작업을 실행하고(시간이 꽤 오래 걸림) 파일로 nohup
리디렉션 하고 싶습니다 . 예를 들면 다음과 같습니다.stdout
nohup task > out.txt &
가끔 출력 파일을 보고 작업 진행 상황을 확인하고 싶을 때가 있습니다.
cat out.txt
Bash가 쓰기 위해 파일을 열 때마다 파일의 내용이 비어 있는 것처럼 보이기 때문에 저는 아직 이를 수행하는 방법을 찾지 못했습니다.
stdout
그래서 내 질문은: "공유" 리디렉션을 허용하는 Linux 명령 이 있습니까 ?
답변1
Bash가 쓰기 위해 파일을 열 때마다 파일 내용은 비어 있는 것으로 나타납니다.
그러나 실제로는 그렇지 않습니다. 실제 상황은 이 작업이완충기출력 - 일정 시간 동안 메모리에 축적된 다음 청크로 파일에 기록됩니다. 메모리 버퍼의 크기는 수 킬로바이트로 고정되어 있습니다. 각 파일 쓰기에는 상대적으로 높은 오버헤드가 있으므로 이는 성능을 위해 수행됩니다. 따라서 처음에는 프로그램의 출력을 볼 수 없지만 조금씩 출력되는 것을 볼 수 있습니다. 이것은 bash와 관련이 없습니다.
즉시 출력을 보려면 다음을 수행하십시오.프로그램을 시작하세요 unbuffer
(에서expect
소프트웨어 패키지). 즉각성을 위해 성능을 교환합니다.
두 번째 문제는 cat
이미 내보낸 출력을 표시하고 파일 끝에 도달하자마자 종료된다는 것입니다. 출력을 추가하는 동안 계속해서 출력을 읽으려면 다음을 사용하십시오.tail
팔로우 모드.
nohup unbuffer task >out.txt &
tail -n +1 -f out.txt
종료하려면 Ctrl+를 누르세요 . 대신 및 해당 팔로우 모드를 사용할 수 있습니다 ( 읽기를 중지하려면 +를 누르세요 ).Ctail
tail
less
F
CtrlC