Buradaki çözümlerin çoğunu denedikten sonra bulduğum en kolay şey, geçici bir dosya kullanmaktı. Birden çok satır çıkışınızla ne yapmak istediğinizden emin değilim, ancak daha sonra read kullanarak satır satır başa çıkabilirsiniz. Gerçekten yapamayacağınız tek şey, hepsini aynı değişkene kolayca yapıştırmaktır, ancak çoğu pratik amaç için bu başa çıkmak çok daha kolaydır.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
İstenen eylemi gerçekleştirmek için hızlı kesmek:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Bunun fazladan bir satır eklediğini unutmayın. Eğer üzerinde çalışırsanız, kod yazabilirsiniz, ben çok tembelim.
EDIT: Bu durumda mükemmel çalışıyor olsa da, bunu okuyan insanlar while döngüsünde stdin kolayca ezmek, böylece size bir satır çalıştıracak, stdin temizlemek ve çıkış bir komut dosyası verebilir farkında olmalıdır. Sanırım ssh bunu yapacak mı? Kısa süre önce gördüm, diğer kod örnekleri burada: /unix/24260/reading-lines-from-a-file-with-bash-for-vs-while
Bir kere daha! Bu kez farklı bir dosya sapı ile (stdin, stdout, stderr 0-2'dir, bu yüzden bash & 3 veya daha yüksek bir değer kullanabiliriz).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
mktemp de kullanabilirsiniz, ancak bu sadece hızlı bir kod örneğidir. Mktemp kullanımı şöyle:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Sonra $ filenamevar'ı bir dosyanın gerçek adı gibi kullanın. Muhtemelen burada açıklanması gerekmez, ancak birisi yorumlarda şikayet etti.