내가 입력하는 동안
cat some_file > new_file1 > new_file2
some_file
in 및 비어 있음에서 new_file2
출력을 얻습니다 new_file1
.
이것의 내부 논리는 무엇입니까? 보다 구체적으로 stdout
파일의 내용은 무엇입니까?
참고: Windows에서는 중간 파일을 건너뜁니다.
답변1
쉘에 따라 다릅니다.
Bash에서는 echo derp >file1 >file2
먼저 열어서 file1
잘라낸 다음 stdout
of가 echo derp
작성되도록 준비합니다 file1
. 그런 다음 bash는 다음과 동일한 작업을 수행합니다 file2
. 즉, 열고 file2
, 잘라내고, stdout
of가 echo derp
write 대신 쓰여지도록 준비합니다 file2
.
최종 효과는 잘리고 file1
(즉, 콘텐츠가 제거됨) 링크가 stdout
발생하지 않는다는 것입니다 file2
. Bash는 표준 출력을 한 번에 한 위치로만 리디렉션할 수 있습니다. 파이프의 경우에도 마찬가지입니다. echo derp > file | cat
"derp"의 결과는 파이프가 아닌 파일에 기록됩니다.
그러나 zsh에서는 직관적으로 예상할 수 있듯이 및 echo derp >file1 >file2
가 동시에 작성됩니다 file1
. zsh를 사용하는 경우 file2
자세한 내용은 MULTIOS를 참조하세요.man zshmisc
이것을 외부에서 달성하려면 다음을 zsh
사용하면 됩니다 tee
. echo derp | tee file1 file2 > /dev/null
zsh와 동일합니다 echo derp >file1 >file2
.