![< 및 >를 사용하여 쉘에서 동일한 파일을 덮어쓰는 방법은 무엇입니까? [복사]](https://linux55.com/image/195828/%26lt%3B%20%EB%B0%8F%20%26gt%3B%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%89%98%EC%97%90%EC%84%9C%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%8D%AE%EC%96%B4%EC%93%B0%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
이렇게 하면 my_script < filename.txt > filename.txt
파일이 덮어쓰여지고 잘립니다.
리디렉션을 지정하는 방법이 Unix 명령줄에 있습니까?아니요동시에 완료, 즉 입력이 완료된 후에 출력이 시작되는 것인가요?
파일을 읽고 명령줄 옵션에 따라 파일을 재생성하고 덮어쓰는 유틸리티를 작성하려고 합니다. 프로그램에 지원을 추가할 수 있다는 것을 깨달았습니다.아니요stdin/stdout을 사용하지만 리디렉션의 유연성과 편리함이 마음에 듭니다.
답변1
다음을 수행할 수 있습니다.
(rm -f foo && yourprogram > foo) < foo
예를 들어:
(rm -f foo && wc > foo) < foo
읽기용으로 열립니다 foo
. 그런 다음 하위 쉘을 시작하고 foo
파일을 열어둔 상태에서 i-노드를 삭제합니다 . 마지막 foo
으로 출력을 열어 foo
.
디렉터리에 대한 쓰기 권한이 필요하므로 파일에 대한 쓰기 권한만 있으면 운이 좋지 않습니다.
i-node가 변경되므로(권한, 소유자, ctime이 모두 손실됨) 이름만 중요하다면 괜찮을 것입니다.
대조적으로 , sponge
출력이 메모리보다 큰 경우에도 yourprogram
작동합니다 .
답변2
여기에서 파일을 문자열 버퍼로 읽은 다음 동일한 파일을 덮어쓸 수 있습니다(shell bash).
my_script <<<$(<filename.txt) >filename.txt