Setelah mencoba sebagian besar solusi di sini, hal termudah yang saya temukan adalah yang jelas - menggunakan file temp. Saya tidak yakin apa yang ingin Anda lakukan dengan beberapa output baris Anda, tetapi Anda kemudian dapat mengatasinya baris demi baris menggunakan baca. Satu-satunya hal yang tidak dapat Anda lakukan adalah dengan mudah memasukkan semuanya ke dalam variabel yang sama, tetapi untuk sebagian besar tujuan praktis ini lebih mudah untuk ditangani.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
Retas cepat untuk membuatnya melakukan tindakan yang diminta:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Perhatikan ini menambahkan garis ekstra. Jika Anda mengerjakannya, Anda dapat membuat kode di sekitarnya, saya terlalu malas.
EDIT: Meskipun kasing ini berfungsi dengan baik, orang yang membaca ini harus sadar bahwa Anda dapat dengan mudah menekan stdin di dalam loop while, sehingga memberi Anda skrip yang akan menjalankan satu baris, menghapus stdin, dan keluar. Seperti ssh akan melakukan itu menurut saya? Saya baru saja melihatnya, contoh kode lainnya di sini: /unix/24260/reading-lines-from-a-file-with-bash-for-vs- Sementara
Sekali lagi! Kali ini dengan filehandle yang berbeda (stdin, stdout, stderr adalah 0-2, jadi kita bisa menggunakan & 3 atau lebih tinggi di bash).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
Anda juga dapat menggunakan mktemp, tetapi ini hanyalah contoh kode cepat. Penggunaan untuk mktemp terlihat seperti:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Kemudian gunakan $ filenamevar seperti Anda akan nama file yang sebenarnya. Mungkin tidak perlu dijelaskan di sini tetapi seseorang mengeluh dalam komentar.