(echo 'text' ; cat file.txt ) > new file.txt 实际上是如何工作的?

(echo 'text' ; cat file.txt ) > new file.txt 实际上是如何工作的?

所以,这是一个简单的代码:

(echo "Some text to prepend"; cat gero.txt) > file.txt

我无法真正掌握这段代码的机制。所以基本上 gero.txt 是一个已经存在的文件,我们创建一个新的 file.txt ,其中包含“要前置的一些文本”+gero.txt 我没有得到的是括号中的部分。在没有管道等明显操作符的情况下,它到底如何将 echo 的输出重定向到 cat |

答案1

当您在中运行一系列命令时交互的外壳,像

echo xxx; cat file; ls; echo yyy

然后所有内容都会连续执行,并将输出发送到终端。

但是,如果您在括号内运行这些命令,则会出现()一个新的非交互式shell 已创建,所有内容都在其中执行。现在,>file.txt()整个输出从这个隐藏的子 shell 重定向到一个文件。

答案2

shell 分三个部分获取该命令行:

  1. (echo ...
  2. >
  3. file.txt

来自第 #1 部分的(标准)输出(不是任何 stderr 输出)由第 #2 部分重定向到第 #3 部分给出的文件中。第一部分中的括号只是将重定向运算符的所有输出组合在一起>

相关内容