답변:
cat
그런 식으로 여러 표준을 사용하도록 지시 할 수 없으므로 마지막 리디렉션이 우선합니다.
cat file1.txt >> file2.txt >> file1.txt
다음과 같습니다.
>> file2.txt ; cat file1.txt >> file1.txt
대상이되는 소스 파일이 무한정 커지면 file1.txt
한 번에 읽을 수 없을만큼 커지기 때문에 파일 시스템을 신속하게 채 웁니다 .
대부분의 최신 cat
구현에서는 재귀를 감지하고 중단해야합니다.
솔라리스 고양이 :
cat: input/output files 'file1.txt' identical
누 고양이 :
cat: file1.txt: input file is output file
그들은 어쨌든 다음과 같이 속일 수 있습니다.
cat < file1.txt | cat | cat >> file2.txt >> file1.txt
쓸모없는 고양이를 사용하는 것이 좋습니다 ...
Bash 셸에서 이것을 재현 할 수 없었습니다.
# non-empty file1
$ echo 1 > file1.txt
$ cat file1.txt >> file2.txt >> file1.txt
cat: file1.txt: input file is output file
1 개의 파일은 길이가 0 인 것으로 생성되지만 위의 메시지가 나타납니다.
$ ls -l
total 4
-rw-rw-r-- 1 saml saml 2 Sep 10 19:35 file1.txt
-rw-rw-r-- 1 saml saml 0 Sep 10 19:35 file2.txt
@jlliagre의 답변을 바탕으로 왜 2 파일을 얻는 지 잘 모르겠습니다. cat
구현에 따라 다를 수 있습니다 .
@jlliagre는 자신의 답변을 업데이트하여이 코드를 동등한 것으로 표시했습니다.
>> file2.txt ; cat file1.txt >> file1.txt
그래서 나는 왜 내가 빈을 얻는 지 안다 file2.txt
. 이 표기법은 합법적입니다.
>> file2.txt
그리고 빈 파일을 만듭니다.
file1.txt
비어 있지 않은 상태에서 다시 시작 하십시오 .
cat
동작을 더 잘 이해하기 시작했습니다 .