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

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

내가 입력하는 동안

cat some_file > new_file1 > new_file2

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

이것의 내부 논리는 무엇입니까? 보다 구체적으로 stdout파일의 내용은 무엇입니까?

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

답변1

쉘에 따라 다릅니다.

Bash에서는 echo derp >file1 >file2먼저 열어서 file1잘라낸 다음 stdoutof가 echo derp작성되도록 준비합니다 file1. 그런 다음 bash는 다음과 동일한 작업을 수행합니다 file2. 즉, 열고 file2, 잘라내고, stdoutof가 echo derpwrite 대신 쓰여지도록 준비합니다 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/nullzsh와 동일합니다 echo derp >file1 >file2.

관련 정보