bash機能にストリームを渡す

bash機能にストリームを渡す

bashファイルではなくファイルにストリームを渡すことができる関数を作成する必要があります。機能は次のとおりです。

ff() { cat /etc/group | fgrep -f "$1" ;}

私が実行すると、次のようになります。

ff <( echo some_user )

エラーメッセージが表示されます。

fgrep: /dev/fd/63: No such file or directory

変える:

some_user:x:0:

答え1

これはのバグまたは制限ですbash。とにかく、bashファイル記述子63は閉じている。これはecho、実行前に記録されていたパイプの読み取り終了ですfgrep

zshあるいは、ksh93そのような制限はありません。

この場合、とにかく次の2つのプロセスは必要ありません。

ff() { fgrep -f "$1" < /etc/group; }

通常、別のシェルを使用するか、次の手順を実行してこのbash制限を解決できます。

ff() { sh -c 'cat /etc/group | fgrep -f "$1"' sh "$1";}

または:

ff() { cat /etc/group | fgrep -f /dev/fd/3;} 3<"$1"

関連情報