![当我在 CLI 上输入以下提示时实际会发生什么:cat demo.txt >> cat example.txt?](https://linux22.com/image/205132/%E5%BD%93%E6%88%91%E5%9C%A8%20CLI%20%E4%B8%8A%E8%BE%93%E5%85%A5%E4%BB%A5%E4%B8%8B%E6%8F%90%E7%A4%BA%E6%97%B6%E5%AE%9E%E9%99%85%E4%BC%9A%E5%8F%91%E7%94%9F%E4%BB%80%E4%B9%88%EF%BC%9Acat%20demo.txt%20%3E%3E%20cat%20example.txt%EF%BC%9F.png)
假设我们有一个仅包含单词“demo”的文本文件 demo.txt 和一个仅包含单词“sample”的文本文件sample.txt。
据我所知,这cat demo.txt >> sample.txt
会将 demo.txt 的内容附加到sample.txt 的内容中。
但是当我在重定向符号的两侧都有 cat 命令时会发生什么?我已经尝试过使用单重定向和双重定向进行相同的操作。我已经研究了足够多的内容,知道如果您不希望某些内容被覆盖,您确实希望使用双重定向而不是单重定向。我还知道 cat 命令是连接的缩写(令我惊讶的是“cat”命令可以兼作 txt 打印“函数”)。
cat demo.txt >> cat sample.txt
我不明白它是如何工作的,我认为应该产生结果是什么?
答案1
首先处理重定向,并将其与命令及其参数分开处理。重定向在单个命令中的位置是任意的。
您显示的命令,
cat demo.txt >> cat sample.txt
相当于
cat demo.txt sample.txt >> cat
或者,如果你愿意的话,
>> cat cat demo.txt sample.txt
该命令作为一个整体,将两个文件的串联附加demo.txt
到sample.txt
一个名为cat
.
shell 将首先打开cat
(您重定向到的文件)进行追加,如果尚不存在则创建它,然后将其用作命令的标准输出流cat demo.txt sample.txt
。
有关的:
我倾向于紧密地编写重定向,重定向运算符和(在本例中)文件之间没有空格。我也倾向于在最后写重定向。
cat demo.txt sample.txt >>cat
有些人喜欢在命令开头编写输入重定向,例如
<file.in cat >file.out
但我个人并不使用它,因为它对我来说看起来很奇怪。