Спробувавши більшість рішень тут, найлегше, що я знайшов, було очевидне - використання тимчасового файлу. Я не впевнений, що ви хочете зробити зі своїм кількома рядковими висновками, але ви можете потім вирішувати це по черзі за допомогою функції read. Єдине, що ви насправді не можете зробити - це легко дотримати це все в одній змінній, але для більшості практичних цілей це легше вирішити.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
Швидкий злом, щоб змусити виконати запитувані дії:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Зауважте, це додає додатковий рядок. Якщо ви працюєте над ним, ви можете кодувати його, я просто лінивий.
EDIT: Хоча цей випадок працює чудово, люди, які читають це, повинні усвідомлювати, що ви можете легко розчавити stdin всередині циклу while, тим самим даючи вам сценарій, який буде виконувати один рядок, очищати stdin та виходити. Як ssh зробить це я думаю? Нещодавно я побачив це, інші приклади коду тут: /unix/24260/reading-lines-from-a-file-with-bash-for-vs-time
Ще раз! Цього разу з іншим файловим файлом (stdin, stdout, stderr 0-2, тому ми можемо використовувати & 3 або вище в bash).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
Ви також можете використовувати mktemp, але це лише швидкий приклад коду. Використання mktemp виглядає так:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Потім використовуйте $ filenamevar, як і власне ім'я файлу. Напевно, тут не потрібно пояснювати, але хтось скаржився у коментарях.