답변:
Bash는 읽기-쓰기 파일 디스크립터<>
를 작성 하는 데 사용 합니다 .
리디렉션 연산자
[n]<>word
파일 디스크립터 n에서 읽기 및 쓰기를 위해 또는 n이 지정되지 않은 경우 파일 디스크립터 0에서 파일의 이름이 확장 된 파일을 엽니 다. 파일이 없으면 작성됩니다.
cat <> file
file
읽기-쓰기를 열고 설명자 0 (표준 입력)에 바인딩합니다. < file
표준 입력에 일반적으로 글을 쓰려고 할 사람은 없지만, 가능하다면 가능할 수 있기 때문에, 현명하게 작성된 프로그램 과 본질적으로 동일 합니다.
간단한 C 프로그램을 write(0, "hello", 6)
작성 hello
하여 직접 테스트 file
하여 표준 입력 을 통해 쓸 수 있습니다.
<>
다른 POSIX 호환 쉘 에서도 동일한 효과로 작동 해야 합니다.
4<>file
)를 주는 것이 유용하며, 0을 기본값으로 사용하는 것이 좋습니다. stdout에서 읽는 것이 더 좋지 않습니다.
<>
Linux와 같은 일부 시스템에서는 다른 프로세스가 쓰기 위해 열 때까지 차단하지 않고 명명 된 파이프를 여는 데 유용합니다.
<>
운영자는 여러 터미널에서 작동하는 응용 프로그램을 작성하는 데 유용 할 수 있으며 때로는 쉘을 시작하려고했습니다. 그 쉘은 표준 제어 터미널에서 실행되는 응용 프로그램을 실행할 수 없다면 <>
... ... pager와 같은 more
명령을 얻기 위해 표준 오류에서 읽은 표준 입력 및 표준 출력 을 사용할 수 없다면 ... 둘 다 일반적인 사용법으로 사용할 수 있습니다. cat food | more - >/dev/tty03 2<>/dev/tty03
<> file
(기본적 등으로 파일 기술자 0 (표준 입력)에서 파일을 엽니 <
에서) 읽기 + 쓰기 모드 의 잘림없이 원본 과 는 사전에 존재하지 않은 경우 파일을 생성 .
이는 시스템 호출에 O_RDWR|O_CREAT
전달 된 플래그에 해당합니다 open()
. 반대로 <
인 O_RDONLY
및 >
인 O_WRONLY|O_CREAT|O_TRUNC
및 >>
O_WRONLY|O_CREAT|O_APPEND
.
응용 프로그램이 일반적으로 stdin에 쓰지 않으므로 stdin 쓰기 가능을 갖는 것은 종종 유용하지 않습니다. 응용 프로그램은 일반적으로 읽을 기대하지 않습니다 그리고 그들이 시작할 때받는 파일 기술자에 쓰기; 그들은 보통 stdin (또는 그들이 직접 여는 파일 디스크립터)에서 읽고 stdout 또는 stderr (또는 그들이 열어 둔 파일 디스크립터)에 씁니다.
<>
그것의 용도를 가질 수 있습니다 :
cat <> file
이상 cat < file
이있는 경우 명령이 실패하지 않으려면 file
존재하지 않지만, 빈은 file
대신 만들었습니다.잘리지 않는 부분은 <>
파일을 덮어 쓰는 데 유용합니다. 그러나이 경우 일반적으로 파일 디스크립터 0에서 사용하지 않습니다.
printf xxx 1<> file
의 첫 3 바이트를 file
로 바꿉니다 xxx
.
Linux와 같은 일부 시스템 <>
에서는 명명 된 파이프 (FIFO)에서 차단되지 않고 명명 된 파이프를 열고 (다른 프로세스가 다른 쪽 끝을 열기를 기다리지 않고) 파이프 구조가 활성 상태로 유지되도록합니다. 예를 들어
mkfifo pipe; sed 's/foo/bar/g' <> pipe
sed
다른 많은 프로세스에서 들어오는 데이터를 처리하고 보지 못합니다 eof
.
<>
기본값 1<>
은 0<>
(stdin) 대신 (stdout )입니다. 이것은 내가보고 한 POSIX 호환 버그이며 다음 릴리스에서 수정 될 것입니다. github.com/att/ast/issues/75 그러나 현재 ksh93 버전이 사용되지 않을 때까지 <>
이식 가능하게 사용하려면 파일 설명자 번호를 포함시켜야합니다 .
mkfifo fifo; exec 3<>fifo
차단 되는가?