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