cat < file
콘텐츠 인쇄문서표준 출력으로.
cat > file
Ctrl+가 감지될 때까지 stdin을 읽고 D입력 텍스트를 작성합니다.문서.
cat <> file
, 적어도 내 Bash 버전에서는 다음을 인쇄합니다.문서문제가 없지만(오류 없음) 파일이 수정되지 않고 수정 타임스탬프도 업데이트되지 않습니다.
Bash 표준은 세 번째 진술에서 무시된 것처럼 보이는 내용을 어떻게 정당화합니까 >
? 더 중요한 것은행위아무것?
답변1
Bash는 <>
생성하는 데 사용합니다.파일 설명자 읽기 및 쓰기:
리디렉션 연산자
[n]<>word
파일 설명자 n 또는 n이 지정되지 않은 경우 파일 설명자 0에서 읽고 쓰기 위해 단어 확장명을 가진 파일이 열리도록 합니다. 파일이 존재하지 않으면 파일이 생성됩니다.
cat <> file
읽기-쓰기를 켜고 file
설명자 0(표준 입력)에 바인딩합니다. < file
일반적으로 누구도 표준 입력에 쓰려고 시도하지 않는다는 점에서 합리적으로 작성된 프로그램 과 본질적으로 동일합니다 . 그러나 누군가 그렇게 하면 그렇게 할 수 있습니다.
이를 직접 테스트하기 위해 간단한 C 프로그램을 작성할 수 있습니다. write(0, "hello", 6)
이는 표준 입력을 통해 작성됩니다 hello
.file
<>
~해야 한다다른 POSIX 호환 셸에서도 작동합니다.같은 효과가 있습니다.
답변2
<> file
파일 열기(기본값은 파일 설명자 0(stdin), 예: <
)읽기+쓰기모델잘림 없음그리고이전에 파일이 없으면 파일을 만듭니다..
이는 시스템 호출 O_RDWR|O_CREAT
에 전달된 플래그에 해당합니다. open()
대조적으로, <
예 O_RDONLY
및 >
예는 O_WRONLY|O_CREAT|O_TRUNC
및 입니다 >>
O_WRONLY|O_CREAT|O_APPEND
.
표준 입력을 쓰기 가능하게 만드는 것은 일반적으로 애플리케이션이 표준 입력에 쓰지 않기 때문에 덜 유용합니다. 응용프로그램은 일반적으로 읽기를 원하지 않습니다.그리고시작 시 받은 파일 설명자에 씁니다. 일반적으로 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
.