파일 잘림을 방지하기 위해 /dev/stdout을 통해 출력 리디렉션

파일 잘림을 방지하기 위해 /dev/stdout을 통해 출력 리디렉션

실행하고 출력을 파일로 수집하려는 프로그램이 있습니다. 그러나 프로그램을 실행하면 프로그램이 열리고 /dev/stdout(예: /proc/self/fd/0) 잘려서 출력을 누적하는 파일에서 모든 내용이 제거됩니다.

이는 작은 쉘 스크립트로 쉽게 재현할 수 있습니다.

sh -c "echo 1; echo 2 > /dev/stdout ; echo 3" >> test.txt

이 명령의 결과에는 test.txtand 2( 3또한이 답변). 1, 2및 을 포함하고 싶습니다 3.

추가 정보:

  • 수행된 절차는 본인이 통제할 수 없습니다. 이렇게 하면 문제가 없다는 것을 알지만 >> /dev/stdout변경할 수는 없습니다.
  • cat이것을 추가하면 작동할 것입니다 ... | cat >> test.txt. 그러나 나는 추가 프로세스 오버헤드가 없는 솔루션을 선호합니다(이는 벤치마킹 목적입니다).
  • chattr +a test.txt해결책일 수도 있지만 루트가 필요합니다. 저는 그냥 일반 사용자입니다.
  • 실제로는 컨테이너를 사용하여 프로그램을 실행하고 출력 리디렉션은 컨테이너 외부에서 구성됩니다. 따라서 컨테이너의 특정 구성이 필요한 솔루션이 있는 경우 이것이 가능합니다.
  • 물론, 글을 쓰거나 /dev/stderr직접 사용하기 위해 /proc/self/fd/{0,1}문제를 단순화하는 일반적인 솔루션을 찾고 있습니다.

/proc/self/fd/0어쨌든 리디렉션이나 파일 설명자 또는 파일을 가리키더라도 잘림을 방지할 수 있는 방법을 구성할 수 있는 방법이 있기를 바랍니다 .

관련 정보