연결된 리디렉션의 내부 논리

연결된 리디렉션의 내부 논리

내가 입력할 때

cat some_file > new_file1 > new_file2

some_filein 에서 출력을 얻었고 new_file2비어 있습니다 new_file1.

그 내부 논리는 무엇입니까? 더 구체적으로 stdoutof 파일은 무엇입니까?

참고: Windows에서는 중간 파일을 건너뜁니다.

답변1

쉘에 따라 다릅니다.

Bash에서는 echo derp >file1 >file2먼저 를 열고 file1잘라낸 다음 stdoutof 가 echo derp에 기록되도록 준비합니다 file1. 그런 다음 bash는 for에 대해 동일한 작업을 수행합니다 file2. 즉, 를 열고 file2잘라내고 대신에 stdoutof가 echo derp작성되도록 준비합니다 file2.

결과적으로 내용은 잘리고 file1(즉, 콘텐츠가 삭제됨) . 체인 연결이 발생하지 않습니다. Bash는 stdout을 한 번에 한 곳으로만 ​​리디렉션할 수 있습니다. 이는 파이프의 경우에도 마찬가지입니다. 결과적으로 "derp"는 파이프가 아닌 파일에 기록됩니다.stdoutfile2echo derp > file | cat

그러나 zsh에서는 직관적으로 예상할 수 있듯이 및 echo derp >file1 >file2둘 다에 씁니다 . zsh를 사용하는 경우 자세한 내용은 MULTIOS를 참조하세요 .file1file2man zshmisc

외부에서 이를 달성하려면 간단히 : 을 zsh사용하면 됩니다 . zsh의 와 동일합니다 .teeecho derp | tee file1 file2 > /dev/nullecho derp >file1 >file2

관련 정보