`cat <> file`은 어떻게 작동하나요?

`cat <> file`은 어떻게 작동하나요?

cat < file콘텐츠 인쇄문서표준 출력으로.

cat > fileCtrl+가 감지될 때까지 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 < filefilefile
  • 잘림 방지 측면은 <>파일을 제자리에 덮어쓰는 데 유용합니다. 하지만 이 경우 일반적으로 파일 설명자 0에서는 사용하지 않습니다.

    printf xxx 1<> file
    

    처음 3바이트 filexxx.

  • 일부 시스템(예: Linux)에서는 <>차단 없이(다른 프로세스가 다른 쪽 끝을 열 때까지 기다리지 않고) 명명된 파이프(FIFO)에서 명명된 파이프를 열면 파이프 구조가 활성 상태로 유지됩니다. 예를 들어:

    mkfifo pipe; sed 's/foo/bar/g' <> pipe
    

    sed쓰기 작업을 수행하는 다른 프로세스에서 들어오는 데이터를 처리하지만 표시되지 않습니다 eof.

관련 정보