파이핑 대상 파일을 어떻게 지우거나 비울 수 있나요?

파이핑 대상 파일을 어떻게 지우거나 비울 수 있나요?

파일로 파이프되는 프로세스가 있다고 가정해 보겠습니다.

yes > foo

이제 파일을 지우거나 비우고 싶지만 foo프로세스가 파일에 쓰기를 원합니다. 즉, 파일을 지운 후에 파일을 다시 채우기 시작합니다.

가능합니까?

답변1

yes >> foo파일을 지우려면 yes > foo및 단독으로 사용:>foo

yes >> foo이유readfoo로 열다O_APPEND. 이로 인해 파일 오프셋은 각 쓰기 전에 파일 끝에 위치하게 됩니다.

따라서 yes파일에 쓸 foo때마다 파일 포인터가 에 있게 됩니다 foo. 또한 : > foo파일을 0바이트로 자릅니다. 이제 0바이트의 "끝"에서 파일 포인터 위치가 변경되어 yes다음 쓰기가 0바이트의 시작 부분에서 다시 시작됩니다.fooO_APPENDfoo

답변2

이렇게 하고 yes > foo또 하면 된다.하다첫 번째 실행 후 foo 파일의 모든 항목을 삭제합니다...

다음 방법 중 하나를 사용할 수 있습니다.

rm foo
yes > foo

> foo
yes > foo

echo "" > foo
yes > foo

관련 정보