Passando um fluxo para uma função bash

5

Eu preciso criar uma função bash que eu possa passar um fluxo para NOT A FILE. Aqui está a função:

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

Quando eu executo assim:

ff <( echo some_user )

Recebo um erro dizendo:

fgrep: /dev/fd/63: No such file or directory

em vez de:

some_user:x:0:
    
por user1960118 14.05.2013 / 00:29

1 resposta

5

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"
    
por 14.05.2013 / 05:58

Tags