"1<>file" 셸 입력/출력 리디렉션은 어떻게 작동하나요?

"1<>file" 셸 입력/출력 리디렉션은 어떻게 작동하나요?

다른 질문에서 이 코드를 보았지만 답변에 대해 언급할 수 없어 여기에 질문합니다.

tr '\n' '\0' < file 1<> file

이 부분 에 관심이 있는데 1<>, 본 적도 없고, 구글에서도 유용한 내용을 찾을 수 없습니다.

답변1

이것은 답변에 있습니다스티븐 체이저러스(Stephen Chazeras)가 썼다.. 이것은POSIX 쉘 기능이는 구체적이지 않습니다 bash. 다른 리디렉션 연산자에 대한 설명과 함께 쉘 설명서에 언급되어 있습니다.

읽고 쓰기 위해 표준 출력인 파일 설명자 1을 열고 이를 1<>file현재 디렉터리의 지정된 파일에 추가합니다.file

그 전에는 동일한 파일의 표준 입력을 추가했습니다.

tr그런 다음 표준 입력에서 읽고 file모든 개행 문자를 널 문자로 변경합니다. 출력은 tr동일한 파일에 다시 기록됩니다.

tr이 작업은 명령의 결과가 그 안에 있는 원본 데이터만큼 길면 작동합니다 file.

결과가 tr원본 파일보다 짧으면 파일 끝에 "이전 데이터"가 나타납니다.

$ cat file
too many @ here: @@@@
the end
$ tr -s '@' <file 1<>file
$ cat file
too many @ here: @
the end
nd

>사용할 수 없으니 주의하세요

tr '\n' '\0' <file >file

왜냐하면 file읽기 전에 잘리기 때문입니다(출력 파일은 자르지 않지만 아직 존재하지 않으면 생성됩니다).tr1<>

그 사람도 못 >>써요

tr '\n' '\0' <file >>file

이는 출력을 tr파일 끝에 추가하고 이전 데이터는 그대로 유지하기 때문입니다.

관련 정보