我需要创建一个bash可以将流传递给 NOT A FILE的函数。这是函数:
ff() { cat /etc/group | fgrep -f "$1" ;}
Run Code Online (Sandbox Code Playgroud)
当我像这样运行它时:
ff <( echo some_user )
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息:
fgrep: /dev/fd/63: No such file or directory
Run Code Online (Sandbox Code Playgroud)
代替:
some_user:x:0:
Run Code Online (Sandbox Code Playgroud)
那将是bash. 不知何故,bash关闭文件描述符 63,这echo是在执行之前写入的管道的读取端fgrep。
zsh或者ksh93没有那个限制。
在这种情况下,您无论如何都不需要这两个进程:
ff() { fgrep -f "$1" < /etc/group; }
Run Code Online (Sandbox Code Playgroud)
在一般情况下,您可以使用另一个 shell 或通过以下方式解决bash限制:
ff() { sh -c 'cat /etc/group | fgrep -f "$1"' sh "$1";}
Run Code Online (Sandbox Code Playgroud)
或者:
ff() { cat /etc/group | fgrep -f /dev/fd/3;} 3<"$1"
Run Code Online (Sandbox Code Playgroud)