将流传递给 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没有这个限制。

在这种情况下,您无论如何都不需要这两个过程:

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

在一般情况下,您可以使用另一个 shell 或通过以下方式解决该bash限制:

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

或者:

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

相关内容