![다른 스레드에서 동시에 콘솔과 파일에 출력을 인쇄하는 명령](https://rvso.com/image/1400518/%EB%8B%A4%EB%A5%B8%20%EC%8A%A4%EB%A0%88%EB%93%9C%EC%97%90%EC%84%9C%20%EB%8F%99%EC%8B%9C%EC%97%90%20%EC%BD%98%EC%86%94%EA%B3%BC%20%ED%8C%8C%EC%9D%BC%EC%97%90%20%EC%B6%9C%EB%A0%A5%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EB%AA%85%EB%A0%B9.png)
저는 bash 스크립트를 작성 중이며 마지막 명령을 별도의 프로세스로 시작하고 싶습니다. 마지막 명령도 모든 출력을 파일로 보냅니다. 그러나 나는 또한 출력이 콘솔에 계속 나타나기를 원합니다. 내가 지금까지 가지고 있는 것은,
$ command > "file" &
그러면 출력이 "file"로 전송되고 자체 프로세스로 명령이 시작됩니다. 그러나 동시에 콘솔에서도 출력을 보고 싶습니다(그러나 ctrl+c 또는 w/e를 누르면 명령이 중지되지 않습니다). 이건 많이 비슷해요이 질문, 그러나 자체 스레드여야 한다는 캐비아가 있습니다.
나는 시도했다:
$ command | tee "file" &
하지만 문제는 tee가 프로세스의 일부가 아니고 출력이 실제로 나타나지 않는다는 것입니다.
따라서 명확히 하자면, 출력을 파일로 보내는 자체 프로세스를 갖고 싶지만 command
출력은 여전히 콘솔에 표시됩니다(q, Enter, Ctrl+C 등을 누를 때까지). 이는 bash 스크립트에 있으므로 두 개의 별도 줄이 허용됩니다.
답변1
command
파일 쓰기를 완료하려는 것처럼 들리지만 콘솔 표시를 중단할 수 있기를 원합니다. 나는 해결책에 대해 다른 접근 방식을 취할 것입니다. 스크립트에서:
> "file"
command > "file" &
tail -n +1 -F "file"
보정:
-n 0
처음에는 줄을 출력하지 않지만 시작된 후에 "file"
추가된 줄을 출력하는 원래 답변이 사용되었습니다 . 이것은 내 의도가 아니었습니다. 실수였습니다. 나는 시작하기 전에 일부를 작성했더 라도 의 모든 행을 나열하는 옵션을 사용하려고 했습니다 . 해당 동작에 대한 올바른 옵션은 입니다 ."file"
tail
"file"
command
tail
-n +1
매뉴얼 페이지 에서 tail(1)
:
-n, --lines=K 마지막 10개 대신 마지막 K개 라인을 출력합니다. 또는 -n +K를 사용하여 Kth로 시작하는 행을 출력합니다.
tail
첫 번째 줄은 이전에 파일에 도달하는 경쟁 조건이 발생할 경우 파일의 내용을 지웁니다 command
.