Tôi đang cố đọc từ stdin nhiều lần trong tập lệnh trình bao, không có may mắn. Mục đích là để đọc một danh sách các tập tin đầu tiên (được đọc từ ống stdin), và sau đó đọc hai lần nữa để có được hai chuỗi tương tác. (Những gì tôi đang cố gắng làm là đọc danh sách các tệp đính kèm trong email, sau đó là chủ đề và cuối cùng là nội dung email).đọc stdin nhiều lần trong bash
Cho đến nay tôi có điều này:
photos=($(< /dev/stdin))
echo "Enter message subject"
subject=$(< /dev/stdin)
echo "Enter message body"
body=$(< /dev/stdin)
(cộng với kiểm tra lỗi mã mà tôi bỏ qua cho succintness)
Tuy nhiên, điều này trở nên một chủ đề trống và cơ thể có lẽ vì sự chuyển hướng thứ hai và thứ ba có được EOF .
Tôi đã cố gắng đóng và mở lại stdin với < & - và nội dung nhưng dường như không hoạt động theo cách đó.
Tôi thậm chí đã thử sử dụng dấu phân tách cho danh sách tệp, sử dụng vòng lặp "while; read line" và thoát khỏi vòng lặp khi dấu phân cách được phát hiện. Nhưng điều đó không có tác dụng (??).
Bất kỳ ý tưởng nào về cách tạo thứ gì đó như thế này?
Lý do không hiệu quả đối với tôi là tôi đang cố gắng sử dụng đường ống để chuyển danh sách ảnh. Nếu tôi chỉ đọc những trường đó trước danh sách, hai bức ảnh đầu tiên trong danh sách sẽ trở thành chủ đề và nội dung email, đó không phải là những gì tôi muốn. (Tất nhiên, tôi có thể ra lệnh rằng chủ thể và cơ thể phải được thông qua trong hai dòng đầu tiên của đường ống đầu vào, nhưng điều đó quá xấu đối với tôi.) – alvherre