2009-03-08 4 views
1

Стандартный способ захвата вывода команды в Bourne оболочки использовать $() синтаксис:Как захватить вывод команды в дескриптор файла в оболочке Bourne?

output=$(mycommand) 

Для команд, которые имеют много продукции, однако, для этого требуется оболочка выделяет память для всей вещи, как один длинный строка. Я бы предпочел, чтобы найти что-то, что делает моральным эквивалентом функции Unix C popen, чтобы получить новый дескриптор файла я мог read от:

newfd=popen(mycommand) 
while read -u $newfd LINE; do 
    #process output 
done 

Является ли это вообще возможно?

+0

bash4 имеет приятную новую функцию: coproc. это было бы идеально для вас! слишком плохо, что все еще так новое –

ответ

7
#!bash 
ls | while read X 
do 
    echo $X is a directory entry 
done 

Заменить 'LS' с командой вашего выбора

+0

Совершенно очевидно, как только вы его видите. Спасибо за быстрый ответ! –

+1

Обратите внимание, что цикл while запущен в подоболочке, поэтому любые изменения, которые он делает для переменных, не передаются обратно в остальную часть скрипта. – pixelbeat

+0

Например, замените 'ls' на find и echo на' printf'. –