Isso seria um erro ou uma limitação em bash
. De alguma forma, bash
fecha o descritor de arquivo 63, que era o final de leitura do canal no qual echo
está gravando antes de executar fgrep
.
zsh
ou ksh93
não tem essa limitação.
Neste caso, você não precisa dos dois processos:
ff() { fgrep -f "$1" < /etc/group; }
No caso geral, você pode usar outro shell ou contornar a limitação bash
com:
ff() { sh -c 'cat /etc/group | fgrep -f "$1"' sh "$1";}
Ou:
ff() { cat /etc/group | fgrep -f /dev/fd/3;} 3<"$1"