Intereting Posts
Как установить драйвер IBM Database Database на Ubuntu для Node.js как разместить конкретное приложение при запуске системы в Fedora 15? Использование файла, отличного от /etc/resolv.conf, для указания DNS-сервера Как отказаться от маршрутов, которые загружены сервером OpenVPN? Какой самый подходящий каталог для размещения файлов, разделяемых между пользователями? Как запустить банку вместе с faketime Как проверить подлинность `getty` на linux? Linux, SVN и Dropbox. В какой каталог должен храниться мой репозиторий svn? Как правильно построить минимальное ядро ​​FreeBSD? Замените новые строки char (^ M) во всех файлах, а затем переименуйте файл на основе строки char В чем разница между запуском исполняемого файла только по имени и добавлением точки / косой черты перед ним? Добавление нового пути в PATH USB-порты не пробуждаются от приостановки до ОЗУ Может ли оболочка предупредить меня, если программа ждет стандартного ввода? Работа с экраном и emacs

Передача потока в функцию 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: 

Это было бы ошибкой или ограничением в 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"