답변1
이는 tr
파일 크기가 변경되지 않기 때문에 작동합니다.
1<>file
file
오버레이 모드에서 표준 출력으로 열립니다. ( <>
읽기/쓰기 모드라고 하지만 읽는 프로그램이 거의 없기 때문에 stdout
실제로 수행하는 작업에 집중하는 것이 더 유용합니다.)
일반적으로 출력( )을 리디렉션하면 >file
파일이 "쓰기" 모드로 열리므로 파일이 생성되거나 지워집니다. 또 다른 일반적인 옵션은 >>file
파일 지우기를 건너뛰고 모든 출력을 끝에 두는 "추가" 모드입니다. 1<>file
또한 파일 지우기를 건너뛰지만 쓰기 커서를 파일 시작 부분에 배치합니다. ( 기본값이 대신 리디렉션이기 1
때문에 이것이 필요합니다 ).<>
stdin
stdout
이렇게 정확하게 수정되는 유틸리티는 거의 없기 때문에 이는 가끔씩만 유용합니다. 또 다른 경우는 대체 길이가 원래 길이와 정확히 동일한 검색 및 대체입니다. (더 짧은 대체 방법도 작동하지 않습니다. 파일이 끝 부분에서 잘리지 않기 때문입니다. 출력이 원본 파일보다 짧으면 파일 끝 내용은 여전히 파일 끝에서 끝납니다. )
답변2
구문을 사용하여 파일을 읽기 전용으로 열고 < file
파일의 행을 표준 입력(STDIN, 즉 파일 설명자 0)으로 읽는 경우. 그런 다음 표준 출력(STDOUT, 즉 파일 설명자 1)이 읽기+쓰기(1<>)를 위해 열리고 그에 따라 각 줄의 내용이 기록됩니다.
이 섹션에서 I/O + Bash에 대한 자세한 내용을 읽을 수 있습니다.20장 I/O 리디렉션, "고급 Bash 스크립팅 가이드".
발췌
[j]<>filename
# Open file "filename" for reading and writing,
#+ and assign file descriptor "j" to it.
# If "filename" does not exist, create it.
# If file descriptor "j" is not specified, default to fd 0, stdin.
#
# An application of this is writing at a specified place in a file.
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
# Random access, by golly.
동일한 파일을 여러 번 열면 어떻게 해야 합니까?
이 U&L Q&A에서 파일 설명자가 어떻게 작동하는지 확인하세요.서로 다른 프로세스의 동일한 fd가 어떻게 동일한 파일을 가리킬 수 있습니까?. 동일한 파일을 여러 번 여는 방법을 다룹니다.