右から左へリダイレクト

右から左へリダイレクト

古い習慣に従って、私はいつも「左から右へ」方向を変えます。

  1. cat file | bar
  2. foo | bar

「右から左へ」リダイレクトできることがわかりました。しかし、2番目の形式(たとえば、あるプログラムから別のプログラムへ)でこれを行うことは可能ですか?

  1. bar < file
  2. bar ??? foo

また、「左から」と「左から」をいつ使用すべきかに関するルールがあるかどうか疑問に思います。 「正しい開始」、または単に好みの問題、または最短または最もエレガントな場合です。

答え1

IIUC、Bashが利用可能プロセスの交換2番目の形式の機能をシミュレートします。

$ echo foobar | grep bar
foobar
$ grep bar <(echo foobar)
foobar

これが機能するには、使用されるコマンドがファイルを引数として受け入れることができる必要があります。grepそうですか?

答え2

|通常、パイプ間のコマンドはサブシェルで実行されると考えることができます。

だから

foo | bar

考慮することができる

(foo) | (bar)

したがって、リダイレクトが状況にどのように適用されるかを理解するのが役立ちます。

foo < bar | baz

等しい

(foo < bar) | (baz)

つまり、入力はfooファイルになり、bar出力は入力になりますbaz

プロセスの交換は同じリダイレクト規則に従います。

foo <(echo bar) | baz

等しい

( foo <(echo bar) ) | (baz)

関連情報