Answers:
您不能cat
以这种方式使用多种标准,因此最后的重定向优先于此:
cat file1.txt >> file2.txt >> file1.txt
等效于:
>> file2.txt ; cat file1.txt >> file1.txt
考虑到作为目的地的源文件也会无限期地增长,因此显然这很快就填满了文件系统file1.txt
。
大多数现代cat
实现应检测递归并中止:
Solaris猫:
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 shell中重现它:
# 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
更好地了解重定向和行为。