web-dev-qa-db-ja.com

(echo'text '; cat file.txt)> new file.txtは実際にどのように機能しますか?

だから、ここに簡単なコードがあります:

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

そして、私はこのコードの仕組みを本当に理解することはできません。つまり、基本的にgero.txtは既存のファイルなので、「先頭に追加するテキスト」+ gero.txtを使用して新しいfile.txtを作成します。取得できないのは括弧内の部分です。パイプ|などのような明白な演算子がない場合、エコーの出力をcatにどの程度正確にリダイレクトしますか?

1
Simullacra

interactive Shellで一連のコマンドを実行すると、次のようになります。

echo xxx; cat file; ls; echo yyy

その後、すべてが連続して実行され、出力が端末に送信されます。

ただし、これらのコマンドを括弧内で実行すると() a new non-interactiveシェルが作成され、その中ですべてが実行されます。さて、>file.txt()この非表示のサブシェルからの出力全体をファイルにリダイレクトします。

4
jimmij

シェルは、次の3つの部分でそのコマンドラインを取得します。

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

パート#1からの(標準)出力(標準出力ではない)は、パート#2によってパート#3で指定されたファイルにリダイレクトされます。パート1の括弧は、リダイレクト演算子>のすべての出力を単純にグループ化します。

1
Jeff Schaller