我需要创建一个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"