Попробовав большинство решений здесь, я обнаружил, что проще всего было использовать временный файл. Я не уверен, что вы хотите сделать со своим многострочным выводом, но вы можете справиться с ним построчно, используя 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
Обратите внимание, что это добавляет дополнительную строку. Если вы работаете над этим, вы можете кодировать его, я просто слишком ленив.
РЕДАКТИРОВАТЬ: Хотя этот случай работает очень хорошо, люди, читающие это, должны знать, что вы можете легко сжать свой стандартный ввод в цикле while, что даст вам скрипт, который будет запускать одну строку, очищать стандартный ввод и выходить. Как ssh сделает то, что я думаю? Я недавно видел это, другие примеры кода здесь: /unix/24260/reading-lines-from-a-file-with-bash-for-vs- while
Еще один раз! На этот раз с другим дескриптором файла (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 так же, как действительное имя файла. Вероятно, не нужно объяснять здесь, но кто-то жаловался в комментариях.