해당 내용을 파일 [중복]에 추가하기 전에 표준 출력 스트림이 완료될 때까지 기다리십시오.

해당 내용을 파일 [중복]에 추가하기 전에 표준 출력 스트림이 완료될 때까지 기다리십시오.

command 1bash에서 stdin을 통해 많은 콘텐츠를 받아들인 다음 해당 콘텐츠를 로 출력하는 명령이 있는 명령을 실행하려고 합니다. file.txt그러나 command 1콘텐츠 스트림이 생성되어 file.txt시작 시 즉시 생성된 command 1다음 command 1완료 시 즉시 생성됩니다. 업데이트하면 올바른 출력이 나옵니다.

echo 'a lot of content' | command 1 > file.txt

문제는 완전히 완성되었을 때만 만들거나 만지고 싶다는 것입니다 file.txt.command 1

이것을 달성할 수 있는 방법이 있나요?

편집하다:

사용 사례: 저는 파일이 변경될 때마다 새로 고치는 웹 개발 서버를 사용하고 있으므로 실제로 파일을 업데이트하기 전에 몇 가지 사전 처리를 수행합니다.

위 명령의 문제점은 파일이 업데이트되거나 빈 내용이 생성되면 서버가 즉시 빈 페이지로 새로고침되기 때문에 후처리가 완료될 때까지 꼭 기다려보고 싶다는 점입니다(약 4초 정도 소요된다고 가정). 그러면 터치가 file.txt페이지에서 제대로 렌더링될 수 있습니다.

따라서 여기에서 명령을 실행하면 업데이트가 완료되면 command 1웹 개발 서버가 자동으로 새로 고쳐집니다.file.txt

답변1

spongeGNU 사용에서 moreutils:

echo 'a lot of content' | command 1 | sponge file.txt

아니면 임시 파일을 사용하세요.

답변2

가장 간단한 해결책은 다음과 같습니다 sponge.@heemayl이 제안했습니다.. 또는 다음을 수행할 수 있습니다.

command > tmpfile && mv tmpfile watched_file

이렇게 하면 command해당 출력이 에 저장 되며 tmpfile명령이 성공적으로 종료된 후에만 이름이 변경됩니다 watched_file(서버가 감시하도록 설정된 파일). 실패 시 이름을 바꾸려면 다음을 사용하십시오.

command > tmpfile; mv tmpfile watched_file

관련 정보