Làm cách nào để tự động trả lời y trong tập lệnh bash?


14

Tôi muốn gỡ cài đặt một số chương trình thông qua một tập lệnh bash. Sau khi tôi chạy lệnh, thiết bị đầu cuối hỏi tôi có chắc chắn rằng tôi muốn gỡ cài đặt nó không. Vì vậy tôi cần trả lời y. Tôi muốn làm điều đó tự động và trả lời ysau 10 giây chậm trễ.

Tôi đã làm ví dụ này nhưng nó không hoạt động -

#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"

Bất kỳ ý tưởng? Centos 7.2


6
ITYM, #! /bin/bash -thay vì#!/usr/bin
Stéphane Chazelas

kiểm tra xem uninstallchương trình có chấp nhận tham số hoặc tập lệnh cấu hình hay không. Cách đó sẽ dễ dàng hơn
phuclv

1
Đã hỏi và trả lời nauseam quảng cáo trên web. " Nó không hoạt động" không phải là một vấn đề tốt. Có lẽ bạn có thể nói rằng vấn đề của bạn khác với vô số người khác như thế nào.

2
Kịch bản của bạn thực sự làm gì: chạy uninstallvà đợi nó thoát ra. Rồi ngủ 10 giây. Sau đó lặp lại y\nvới thiết bị xuất chuẩn (vẫn được kết nối với thiết bị đầu cuối, không kết nối với bất kỳ chương trình nào)
Peter Cordes

Câu trả lời:


46

Đó là những gì yeslệnh dành cho. Nó xuất ra ymột dòng trên mỗi dòng vô thời hạn để có thể chuyển sang các lệnh hỏi có / không có câu hỏi.

yes | /opt/MNG/MNGVIEWHP/fe/uninstall

Đó là câu trả lời ycho tất cả các câu hỏi. Để trả lời ncho tất cả các câu hỏi, thay thế yesbằng yes n. Đối với hỗn hợp được xác định trước yn, bạn có thể thay thế yesbằng:

printf '%s\n' y n n y y n...

Hoặc chạy nó dưới dạng:

/opt/MNG/MNGVIEWHP/fe/uninstall << 'EOF'
y
n
n
y
y
n
EOF

Nếu bạn cần câu trả lời không có sẵn để đọc trước 10 giây, bạn sẽ làm:

(sleep 10; echo y; sleep 2; echo n;...) | /opt/MNG/MNGVIEWHP/fe/uninstall

Nhưng điều đó có lẽ không cần thiết, khi chúng ta viết ylên đường ống, nó sẽ ở đó uninstallđể đọc nó bất cứ khi nào nó muốn đọc nó, không chắc bạn cần phải chờ nó sẵn sàng để đọc nó. Ngoại lệ sẽ là nếu uninstallquyết định tuôn ra đầu vào trước khi đặt câu hỏi.

Tất cả những người giả sử uninstalllệnh chỉ đọc mỗi câu trả lời là một dòng đầu vào từ đầu vào tiêu chuẩn của nó.

Đối với trường hợp phức tạp hơn, nơi mà các lệnh đọc các câu trả lời trực tiếp từ các thiết bị tty hoặc nơi bạn cần đến thức ăn chăn nuôi câu trả lời có điều kiện (ví dụ dựa trên những gì các kết quả đầu ra lệnh), đó là nơi mà bạn muốn sử dụng những thứ như expecthay zsh's zpty.

Lưu ý rằng nhiều chương trình tương tác có thể vào một số chế độ không tương tác khi được thông qua một số tùy chọn. Bạn có thể muốn kiểm tra hướng dẫn của họ trước, trước khi dành quá nhiều nỗ lực để giải quyết vấn đề.


Cảm ơn! Điều này tốt trong trường hợp chúng ta chỉ cần trả lời cho một câu hỏi. Điều gì đã xảy ra nếu chúng ta phải trả lời trên 20 câu hỏi chẳng hạn?
Shalev Sason

@Shalev, xem chỉnh sửa.
Stéphane Chazelas

Cảm ơn ! Vì vậy, nếu tôi muốn nhập các giá trị khác như interger (ví dụ 2), tôi cần thay thế nó thay vì "y"? printf '% s \ n' ynnyyn 2 3 ny | / opt / MNG / MNGVIEWHP / fe / gỡ cài đặt
Shalev Sason

Vâng, đó là ý tưởng.
Stéphane Chazelas

3
@ShalevSason, trong tất cả các giải pháp tôi đã đưa ra, như với echo "y", mỗi lần, chúng tôi viết y<newline>, mô phỏng bạn nhấn ytheo sau là Enter. Nếu bạn muốn mô phỏng nhấn Enter một mình, đó sẽ là một dòng trống, vì vậy printf '%s\n' y n '' 2 3(đâu ''là dòng trống).
Stéphane Chazelas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.