예를 들어, 제가 사용하고 있는 명령은 다음과 같습니다.
tr -d '\n' < newfile.ppm
결과를 정확히 동일한 파일로 출력하고 싶기 때문에 지금 다음을 수행하고 있습니다.
tr -d '\n' < newfile.ppm > newfile.ppm
이것이 작동하지 않는 이유는 무엇이며 어떻게 작동하게 할 수 있습니까?
답변1
이것은 매우 일반적인 "문제"입니다.
파일에 쓰기 위해 stdout 또는 stderr을 리디렉션하면 쉘은 먼저 파일을 잘라 쓰기 준비를 합니다. 따라서 일어나는 일은 대략 다음과 같습니다.
- 쉘이 stdin을 다음으로 설정합니다.
newfile.ppm
- 쉘이
newfile.ppm
길이 0으로 잘립니다. - 쉘이 stdout을 다음으로 설정합니다.
newfile.ppm
- 쉘이 실행됩니다
tr -d '\n'
. 보시다시피 현재 시점에서는 의 내용이newfile.ppm
이미 사라져서 읽을 내용이 없습니다.
이 문제를 해결하려면 대신 다른 파일로 출력하면 됩니다. 나중에 이름을 바꿀 수 있습니다
답변2
그러면 원하는 작업이 수행됩니다.
[stephan@stephan] ~
$ echo "meh
" > file
[stephan@stephan] ~
$ cat file | tr -d '\n' > file ; cat file
meh