다른 스레드에서 동시에 콘솔과 파일에 출력을 인쇄하는 명령

다른 스레드에서 동시에 콘솔과 파일에 출력을 인쇄하는 명령

저는 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"commandtail-n +1

매뉴얼 페이지 에서 tail(1):

   -n, --lines=K 마지막 10개 대신 마지막 K개 라인을 출력합니다.
                   또는 -n +K를 사용하여 Kth로 시작하는 행을 출력합니다.

tail첫 번째 줄은 이전에 파일에 도달하는 경쟁 조건이 발생할 경우 파일의 내용을 지웁니다 command.

관련 정보