이름이 지정된 파일의 내용file
testing 1
testing 2
테스트된 명령
exec 3<> ./tmp
cat file 1>&3 3>&1
아무것도 출력되지 않습니다. 왜?
나는 내 명령을 다음과 같이 읽었습니다.
cat
파일 설명자의 내용을 file
읽어서 STDOUT
파일 설명자에 공급한 3
다음, 파일 설명자의 내용을 가져와 3
해당 내용을 파일 설명자에 공급합니다.STDOUT
제가 명령어를 잘못 읽었나요?
명령을 더 잘 이해하고 출력을 얻기 위해 어떻게 읽을 수 있습니까?file
Stéphane의 답변을 이해한 후 다음 명령을 시도했습니다.
cat file 1>&3 3> ofile
fd 3의 내용(fd 1, 즉 STDOUT에서 가져옴)을 쓰지 않습니다.ofile
하지만 다음 명령을 시도했습니다.
cat file 1>&3 && cat <3
fd 3의 내용을 STDOUT으로 인쇄합니다.
ofile
fd 3에 fd 1의 내용이 있는데 왜 fd 3이 작성되지 않습니까?
Stéphane, Jesse_b 명령, 즉 아래 설명에서 언급한 명령
cat file 3> ofile 1>&3
file
작동하고 콘텐츠를 작성 ofile
하지만 명령은
cat file 1>&3 3> ofile
앞서 언급했듯이 ofile
.
1>&3
끝과 시작의 위치는 3> ofile
이 두 명령의 출력에 어떤 영향을 줍니까?
답변1
cmd x>&y
다음과 같이 말하세요. "fd y가 리디렉션하는 리소스로 fd x를 리디렉션하세요."
그래서:
cat 1>&3 3>&1
cat
fd 1(stdout)이 fd 3에서 열린 리소스와 동일한 리소스로 이동해야 한다는 뜻인가요? 즉, 읽기 ./tmp
+쓰기 모드로 열면 fd 3이 fd 1에서 열린 것과 동일한 리소스로 이동해야 한다는 뜻인가요? 그냥 넣어 로 설정되어 있습니다 ./tmp
.
따라서 cat
fd 1과 3을 로 리디렉션하기 시작합니다 ./tmp
. cat
fd 3에 아무 작업도 수행하지 않고 cat
fd 3을 원하는 대로 리디렉션할 수 있으며 아무 효과도 없습니다.
그러나 내용을 fd 1에 기록하므로 해당 내용이 의 시작 부분에 기록된 file
것을 알 수 있습니다 .file
./tmp
cat file
file
콘텐츠를 한 번만 하나의 fd에만 씁니다 . file
두 개의 다른 fd에 두 번 쓰는 것을 원한다면 다음을 원할 것입니다 tee
.
존재하다
< file tee ./tmp
tee
fd 0(여기서는 읽기 전용 모드로 열도록 리디렉션됨 ) (잘린 쓰기 전용 모드로 열림) 에서 file
읽은 내용을 fd 1(stdout)에 씁니다 ../tmp
tee
열어 보라고 할 수도 있지만./tmp
추가의mode 에서는 그런 잘림 없이 읽기+쓰기 모드로 열도록 -a
지시할 수 없습니다 ../tmp
3<>
이렇게 하려면 다음이 필요합니다.
< file tee /dev/fd/3 3<> ./tmp
Linux를 제외하고 작동하거나 zsh
내장된 티 기능을 사용합니다.
cat < file 3<> ./tmp >&1 >&3 3>&-
fd 1이 두 번 리디렉션되고 zsh
옵션이 활성화되면 mulltios
(기본적으로 설정됨) 내부 tee가 실행되어 출력을 두 대상 모두에 전달합니다(읽기 cat
출력을 실행하고 두 대상 프로세스의 내부 tee에 기록함으로써).
fd 3의 임시 사용은 다음 문제를 해결하는 것입니다:
cat < file >&1 1<> ./tmp
zsh는 불평할 것이다.zsh: file mode mismatch on fd 1
당신이 원한다고 가정하기 때문에 불평할 것입니다읽다에서 ./tmp
.