< 및 >를 사용하여 쉘에서 동일한 파일을 덮어쓰는 방법은 무엇입니까? [복사]

< 및 >를 사용하여 쉘에서 동일한 파일을 덮어쓰는 방법은 무엇입니까? [복사]

이렇게 하면 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

관련 정보