내 환경: zsh, macOS
관련 명령:
echo 'hi' | tee > a b c
echo 'hi' > a b c
a
명령 1은 이름이 이고 내용이b
포함된 파일을 생성합니다 .c
hi
a
명령 2는 content 라는 파일을 생성합니다hi b c
.
AFAIK, 그냥 명령 1을 사용하세요아니요 >
다음 맨페이지에 문서화되어 있습니다 tee
.
echo 'hi' | tee a b c
>
위 코드(예: 명령 1)를 추가하면 여전히 여러 파일이 생성되는 반면 명령 2는 하나의 파일만 생성되는 이유를 이해하는 데 도움이 필요합니다 .
답변1
리디렉션( >
이 경우)은 다음 매개변수를 리디렉션 대상으로 "사용"합니다. 그래서
echo 'hi' | tee > a b c
동등하다
echo 'hi' | tee b c > a
tee
입력을 에 복사 b
하고 c
표준 출력을 에 복사합니다 a
.
echo 'hi' > a b c
동등하다
echo 'hi' b c > a
표준 출력으로 출력하고 hi b c
, 이는 a
.
답변2
이것은 기본 쉘 구문입니다. 리디렉션 연산자는 >
표준 출력을 리디렉션할 파일 이름으로 사용되는 하나의 인수만 허용합니다. 나머지 매개변수는 명령에 전달됩니다.
따라서 첫 번째 명령은 다음과 같습니다.
echo 'hi' | tee > a b c
명령을 실행하여 echo 'hi' | tee b c
표준 출력을 file 로 리디렉션합니다 a
. 공교롭게도 tee
표준 입력은 표준 출력뿐만 아니라 인수로 제공된 모든 파일에 복사됩니다. 따라서 내보낸 데이터는 파일에 echo 'hi'
복사되고 ( 파일 리디렉션을 통해) 표준 출력에 복사됩니다 .tee
b
c
a
두 번째 명령:
echo 'hi' > a b c
명령을 실행하여 echo 'hi' b c
표준 출력을 파일로 다시 리디렉션하십시오 a
. 생성된 파일을 보면 a
텍스트가 포함되어 있는 것을 볼 수 있지만 hi b c
, 첫 번째 경우에는 생성된 세 파일 모두 텍스트만 포함되어 있습니다 hi
.
답변3
tee
표준 입력 스트림을 가져오고 지정된 파일 및 표준 출력에 복사본을 보냅니다. 를 사용하면 파일 에 정상적으로 쓰는 동안 > a
표준 출력 스트림을 파일에 캡처할 수 있습니다 .a
tee
b
c
> filename
|
적절한 간격을 두고 이스케이프되지 않는 한 측면의 어느 지점에서나 나타날 수 있습니다 .
이를 설명하기 위해 다음은 동의어입니다.
echo hi | > a tee b c
echo hi | tee > a b c
echo hi | tee b > a c
echo hi | tee b c > a