Tôi có một chương trình tự động thoát khi đọc EOF trong một luồng nhất định (trong trường hợp sau, stdin).
Bây giờ tôi muốn tạo một kịch bản shell, tạo ra một ống có tên và kết nối stdin của chương trình với nó. Sau đó, tập lệnh ghi vào đường ống nhiều lần bằng cách sử dụng echo
và cat
(và các công cụ khác tự động tạo EOF khi chúng thoát). Vấn đề tôi gặp phải là, khi lần đầu tiên echo
được thực hiện, nó sẽ gửi EOF đến đường ống và làm cho chương trình thoát ra. Nếu tôi sử dụng một cái gì đó như thế tail -f
thì tôi không thể gửi EOF khi tôi có ý định rời khỏi chương trình. Tôi đang nghiên cứu một giải pháp cân bằng nhưng vô ích.
Tôi đã tìm thấy cả cách ngăn chặn EOF và cách gửi EOF thủ công nhưng tôi không thể kết hợp chúng. Có gợi ý nào không?
#!/bin/sh
mkfifo P
program < P & : # Run in background
# < P tail -n +1 -f | program
echo some stuff > P # Prevent EOF?
cat more_stuff.txt > P # Prevent EOF?
send_eof > P # How can I do this?
# fg
exec 3>P
Nguyên nhân này bị treo trong bash, tại sao?