Sau cố gắng hầu hết các giải pháp ở đây, điều đơn giản nhất tôi thấy là hiển nhiên - sử dụng một tệp tạm thời. Tôi không chắc chắn những gì bạn muốn làm với đầu ra nhiều dòng của bạn, nhưng sau đó bạn có thể đối phó với nó theo từng dòng bằng cách đọc.Về điều duy nhất bạn có thể không thực sự làm là dễ dàng dính nó tất cả trong cùng một biến, nhưng đối với hầu hết các mục đích thực tế này là cách dễ dàng hơn để đối phó với.
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
nhanh hack để làm cho nó làm những hành động yêu cầu:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
Chú giải này thêm một dòng thêm. Nếu bạn làm việc trên nó, bạn có thể viết mã xung quanh nó, tôi chỉ là quá lười biếng.
EDIT: Trong khi trường hợp này hoạt động hoàn hảo tốt, mọi người đọc bài viết này nên lưu ý rằng bạn có thể dễ dàng bí stdin của bạn bên trong vòng lặp while, do đó đem lại cho bạn một kịch bản mà sẽ chạy một dòng, stdin rõ ràng, và thoát . Giống như ssh sẽ làm điều đó tôi nghĩ? Gần đây tôi vừa xem, các ví dụ mã khác tại đây: https://unix.stackexchange.com/questions/24260/reading-lines-from-a-file-with-bash-for-vs-while
Một lần nữa! Lần này với một filehandle khác (stdin, stdout, stderr là 0-2, vì vậy chúng ta có thể sử dụng & 3 hoặc cao hơn trong bash).
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
bạn cũng có thể sử dụng mktemp, nhưng đây chỉ là ví dụ về mã nhanh. Cách sử dụng cho mktemp trông giống như:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
Sau đó, sử dụng $ filenamevar giống như tên thật của tệp. Có lẽ không cần phải được giải thích ở đây nhưng ai đó phàn nàn trong các ý kiến.
nó làm tôi ngạc nhiên. bạn không có $ (cat ./myscipt)? nếu không tôi đã có thể mong đợi nó để cố gắng thực hiện lệnh abc, def và ghi –
@ litb: có, tôi cho rằng như vậy; bạn cũng có thể sử dụng $ (<./ myscript) để tránh thực thi lệnh. –
(NB: hai chú thích ở trên đề cập đến một sửa đổi của câu hỏi bắt đầu _Tôi đã có một kịch bản 'myscript' có chứa sau đây, dẫn đến các câu hỏi. 'myscript' mà kết quả đầu ra sau đây) làm cho các bình luận không cần thiết. Tuy nhiên, bản sửa đổi là từ 2011-11-11, lâu sau khi hai ý kiến được thực hiện –