Mat*_*att 19 io-redirection cat
我今天尝试了一些附加操作,出于好奇,我运行了这个(其中file1.txt非空,file2.txt为空):
$ cat file1.txt >> file2.txt >> file1.txt
Run Code Online (Sandbox Code Playgroud)
当我看到它需要一段时间时,我按Ctrl+C结束它。到那时,file1.txt 的大小已达数百 MB。
切换文件名不会产生相同的效果;只有当文件按此顺序时,才会发生无限重定向。究竟是怎么回事导致了这种情况?
jll*_*gre 24
您不能告诉cat
以这种方式使用多个标准,最后一个重定向优先,因此:
cat file1.txt >> file2.txt >> file1.txt
Run Code Online (Sandbox Code Playgroud)
相当于:
>> file2.txt ; cat file1.txt >> file1.txt
Run Code Online (Sandbox Code Playgroud)
考虑到作为目标的源文件也无限期地增长,这显然会迅速填满文件系统,前提file1.txt
是它足够大而不能立即读取。
大多数现代cat
实现应该检测递归性并中止:
太阳猫:
cat: input/output files 'file1.txt' identical
Run Code Online (Sandbox Code Playgroud)
咕噜猫:
cat: file1.txt: input file is output file
Run Code Online (Sandbox Code Playgroud)
无论如何,他们都可以被愚弄,例如:
cat < file1.txt | cat | cat >> file2.txt >> file1.txt
Run Code Online (Sandbox Code Playgroud)
对猫的一个很好的不那么无用的使用......
归档时间: |
|
查看次数: |
645 次 |
最近记录: |