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; }

일반적으로 다른 셸을 사용하거나 다음 을 수행하여 이 bash제한 사항을 해결할 수 있습니다.

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

또는:

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

관련 정보