2008-12-30 44 views
11

Tôi có một tập lệnh gọi một ứng dụng yêu cầu đầu vào của người dùng, ví dụ: chạy ứng dụng yêu cầu người dùng nhập 'Y' hoặc 'N'.
Làm thế nào tôi có thể nhận được tập lệnh shell không yêu cầu người dùng nhập dữ liệu mà sử dụng giá trị từ biến được xác định trước trong tập lệnh?Nhập từ trong tập lệnh shell

Trong trường hợp của tôi, sẽ có hai câu hỏi yêu cầu đầu vào.

Trả lời

14

Bạn có thể đặt đường ống trong bất kỳ văn bản nào bạn muốn trên stdin và nó sẽ chỉ giống như việc người dùng nhập chính nó. Ví dụ để mô phỏng gõ "Y" chỉ cần sử dụng:

echo "Y" | myapp 

hoặc sử dụng một biến shell:

echo $ANSWER | myapp 

Ngoài ra còn có một lệnh unix gọi là "có" mà kết quả đầu ra một dòng liên tục của "y" cho các ứng dụng yêu cầu nhiều câu hỏi mà bạn chỉ muốn trả lời trong phần khẳng định.

+0

echo là những gì tôi cần nhưng với nhiều tham số ... –

+3

Trong trường hợp đó, hãy thử sử dụng lệnh "printf" thay vì echo và bao gồm dòng mới trong chuỗi. Vì vậy, nếu bạn muốn trả lời "Y" thì "N" sử dụng: printf "Y \ nN \ n" | myapp –

2

lệnh mong đợi cho các tình huống phức tạp hơn, hệ thống của bạn nên có nó. Đã không sử dụng nó nhiều, nhưng tôi nghi ngờ những gì bạn đang tìm kiếm.

$ man expect 

http://oreilly.com/catalog/expect/chapter/ch03.html

+0

Dường như không có 'mong đợi' ở đây - đang chạy trên HPUX11 –

+0

Cài đặt nó. mong đợi là một công cụ vô giá. – PEZ

2

Nếu ứng dụng đọc từ stdin (như trái ngược với từ/dev/tty, như ví dụ chương trình passwd làm), sau đó nhập multiline là ứng cử viên hoàn hảo cho một đây-tài liệu.

#!/bin/sh 

the_app [app options here] <<EOF 
Yes 
No 
Maybe 
Do it with $SHELL 
Quit 
EOF 

Như bạn thấy, tài liệu ở đây thậm chí cho phép thay thế thông số. Nếu bạn không muốn điều này, hãy sử dụng <<'EOF'.

+1

Upvote cho giải pháp đa dòng – Pankrates

0

Tôi thích theo cách này: Nếu bạn muốn nhiều đầu vào ... bạn đặt vào nhiều câu lệnh tiếng vang như vậy:

{ echo Y; Y; } | sh install.sh >> install.out 

Trong ví dụ trên ... Tôi ăn hai đầu vào vào install.sh kịch bản. Sau đó ... ở phần cuối, tôi đang tạo đầu ra tập lệnh cho một tệp nhật ký được lưu trữ và xem sau này.

Các vấn đề liên quan