古い習慣に従って、私はいつも「左から右へ」方向を変えます。
cat file | bar
foo | bar
「右から左へ」リダイレクトできることがわかりました。しかし、2番目の形式(たとえば、あるプログラムから別のプログラムへ)でこれを行うことは可能ですか?
bar < file
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)