Tôi tự hỏi làm thế nào để tạo ra một ốngống linux với nhiều chương trình yêu cầu người dùng nhập vào
program 1 | ... | program N
nơi nhiều trong những chương trình yêu cầu người dùng nhập vào. Vấn đề là |
bắt đầu các chương trình song song và do đó chúng bắt đầu đọc từ thiết bị đầu cuối song song.
Đối với các trường hợp như vậy, sẽ hữu ích khi có đường ống |
bắt đầu chương trình (i + 1) chỉ sau khi chương trình tôi đã tạo ra một số đầu ra.
Edit:
Ví dụ:
cat /dev/sda | bzip2 | gpg -c | ssh [email protected] 'cat > backup'
đây cả gpg -c
cũng như ssh
yêu cầu một mật khẩu.
Giải pháp cho ví dụ cụ thể này là tạo cặp khóa ssh, nhưng điều này là không thể trên mọi hệ thống và tôi đã tự hỏi liệu có giải pháp chung hay không. Ngoài ra gpg cho phép cụm từ mật khẩu được chuyển thành đối số dòng lệnh, nhưng điều này không được đề xuất vì lý do bảo mật.
Khi bạn kết nối một chương trình để một đường ống, nó được đầu vào của nó từ một chương trình khác, không phải là người sử dụng. Bạn có chắc bạn muốn một đường ống? Tôi thực sự không thể nghĩ ra một chương trình mà cả hai đều có đầu vào của người dùng * và * đọc từ đầu vào tiêu chuẩn. – chepner
Không phải là câu trả lời, nhưng có thể đưa bạn đi đúng hướng: Bạn có thể bao gồm mã xung quanh mỗi chương trình để kiểm tra đầu ra cho một chuỗi cụ thể không, cập nhật cờ khi tìm thấy và có vòng lặp cuộc gọi khác cho đến khi lá cờ của chương trình trước đó được cập nhật, sau đó cho phép chúng chạy? – JohnLBevan
Hiển thị ví dụ cụ thể về sự cố này. Một chương trình có thể đọc từ 'stdin' và từ'/dev/tty', nhưng điều này sẽ không bình thường. –