私は次のエイリアスを定義しました。
alias xyz='command1; command2'
他のコマンドpqrの出力をcommand2にパイプしたいと思います。たとえば、次のようになります。
pqr | xyz -f -
可能ですか?どうすればいいですか?
ベストアンサー1
エイリアスの使用は通常いいえ非対話型シェルスクリプトのベストプラクティス(バッシュFAQ/080)。 OPでエイリアスを定義した方法で、最初のコマンドのみがstdinから読み取られます。なぜなら、;
最初のコマンドの後にstdinが終了するからです。
{..}
1つの可能なアプローチは、すべてのリダイレクトがグループ内の全コマンドセットに適用されるようにコマンドグループ化を使用することです。それでもalias
定義を保持して実行できます。
alias xyz='{ command1; command2; }'
この場合、comamnd1
不必要に標準入力のコピーが得られます。次の操作でドラッグできます
alias xyz='{ command1 < /dev/null ; command2 - ; }'
または、関数を使用してコマンドを定義します。
xyz() {
command1; command2
}
シェルがプロセスbash
置換をサポートしている場合は、stdinの内容を位置引数として受け取るようにzsh
定義できます。command2
関数を次のようにオーバーライドします。
xyz() {
command1
command2 "$@"
}
次に、コマンド(pqr
)を次のように呼び出します。
xyz < <(pqr)
上記を簡単に説明すると、
zoo() { date; sed 's/foo/boo/' "$@"; }
zoo < <(echo food) #(or) zoo <<<"food"
Mon Nov 25 02:44:49 EST 2019
bood