エイリアスの2番目のコマンドにパイプされた入力をどのように渡すことができますか?

エイリアスの2番目のコマンドにパイプされた入力をどのように渡すことができますか?

私は次のエイリアスを定義しました。

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

おすすめ記事