파일 1, 파일 2, 파일 3이 있습니다.
파일 1에는 다음이 포함됩니다.1
파일 2에는 다음이 포함됩니다.2
파일 3에는 다음이 포함됩니다.3
나는 명령을 사용한다
cat file1 > file2 > file3
결과 :
파일 11
file2(아무것도 포함하지 않음)
파일 31
왜 이 노선의 어떤 것이 파괴되겠습니까? 기본적으로 내가 뒤에서 보지 못하는 것은 무엇입니까?
("추가"를 사용하는 보조 메모 >>
는 더 이상합니다)
답변1
Bourne/POSIX 스타일 쉘의 리디렉션배쉬와 같은, 대시, ksh 등
나타나는 순서대로 왼쪽에서 오른쪽으로 처리합니다.
> x
열려 있는그리고 잘랐다file , x
표준 출력에 쓰기 위한 파일 설명자를 설정합니다. x
당신의 명령:
cat file1 > file2 > file3
할 것이다:
- 열고 자르기
file2
- 이 파일 설명자에 쓰도록 표준 출력을 설정합니다.
- 열고 자르기
file3
- 이 파일 설명자에 쓰도록 표준 출력을 설정합니다.
- 달리기
cat file1
최종 결과는 표준 출력이 file3
런타임을 가리킨다는 것입니다 cat
. file2
둘 다 file3
현재 내용을 지우고 file3
(의 내용) 출력을 여기에 씁니다.cat
file1
출력을 여러 스트림으로 분할하여 별도의 파일에 쓰려는 경우 다음을 수행할 수 있습니다.사용tee
:
cat file1 | tee file2 > file3
기타 쉘(특히zsh
)는 다르게 동작하며 명령은 예상할 수 있는 결과를 제공하며 둘 file2
다 .file3
file1
여기서는 이것이 cat
필요하지 않으며 <
입력 리디렉션도 작업을 수행합니다.
답변2
fd를 여러 번 리디렉션하면 모든 리디렉션이 수행되고 마지막 리디렉션이 남습니다.
$ strace -f -e open bash -c 'cat file1 > file2 > file3'
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
...
[pid 20508] open("file2", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
[pid 20508] open("file3", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
...
[pid 20508] open("file1", O_RDONLY) = 3
따라서 file2
열리고 잘린 다음 file3
열립니다.