command 1
bash에서 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
sponge
GNU 사용에서 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