私たちは皆、シェルスクリプトとインストールされたプログラム(grep、awkなど)にパイプする方法を知っています。しかし、.bashrcまたは.zshrcのソース機能はどうですか?
テスト機能は次のとおりです。
function fff(){
echo "$@"
}
以下はテストコマンドです。
$ echo "hello world" | fff
それは動作しません
ベストアンサー1
関数には、標準入力ストリーム(パイピング時に取得)のデータではなく、コマンドライン引数が必要です。
あなたができることは、関数にコマンドライン引数が与えられているかどうかをテストし、そうでない場合は標準入力ストリームに出力することです。
fff () {
if [ "$#" -gt 0 ]; then
echo "$@"
else
cat
fi
}
テスト:
$ echo "hi there" | fff
hi there
別の解決策は、元の関数定義を次のコマンドに置き換えることです。
fff "$( echo "hi there" )"
これは$@
関数内の単一の文字列に設定されますhi there
。パイプされたデータが単一の文字列または短いテキスト行の場合、これは完全に有効なソリューションです。大量のデータを処理するには、上記のテストで示されているように、上記の関数定義の呼び出しを通常の行でアプローチ(使用可能awk
)に置き換え、パイプからデータを読み取ることを検討してください。cat