
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"