Làm cách nào để viết câu trả lời “có” để cài đặt chương trình?


113

Tôi làm việc với các phiên bản Amazon Linux và tôi có một vài tập lệnh để điền dữ liệu và cài đặt tất cả các chương trình tôi làm việc, nhưng một vài chương trình yêu cầu:

Do you want to continue [Y/n]?

và tạm dừng cài đặt. Tôi muốn tự động trả lời "Y" trong mọi trường hợp, tôi chỉ biết cách thực hiện.


3
Trình quản lý gói có thể có một --noprompthoặc --noconfirmcờ mà bạn có thể sử dụng.
Máy xay sinh tố

Câu trả lời:


209

Lệnh 'yes' sẽ lặp lại 'y' (hoặc bất cứ thứ gì bạn yêu cầu) vô thời hạn. Sử dụng nó như:

yes | command-that-asks-for-input

hoặc, nếu bắt buộc phải viết hoa 'Y':

yes Y | command-that-asks-for-input

Điều này chỉ hoạt động với một số lệnh được hỗ trợ để sử dụng đầu vào từ có, phải không? Tôi đã thử với cái nhìn từ OpenStack và không làm việc này, tôi nghĩ mong đợi là chính xác hơn cho mọi hoàn cảnh
HVNSweeting

1
//, Nếu bạn phải nhập đầy đủ từ "yes" thì sao?
Nathan Basanese

1
Hãy cẩn thận với yesviệc sử dụng CPU tối đa. stackoverflow.com/a/18164007/720665
David Salamon

Đẹp. Điều này chỉ làm cho cuộc sống của tôi dễ dàng hơn đáng kể. : D. Ngoài ra, googling -ycho các tập lệnh bash là CỨNG.
Nathan Smith

1
@DavidSalamon đó chỉ là trường hợp nó viết cho một cái gì đó không giới hạn, như /dev/nullhoặc STDOUT. Được đưa vào một lệnh, nó sẽ chỉ ghi một dòng vào đường dẫn mỗi khi lệnh nhận đọc một dòng và sẽ đợi nếu không.
Walf

68

echo y | command nên làm việc.

Ngoài ra, một số trình cài đặt có cờ "tự động có". Nó -ydành cho apt-getUbuntu.


Tôi đang cố tạo tiếng vang "giturl no" | jspm registry tạo registry_name jspm-git trong tập lệnh shell của tôi. nhưng nó vẫn tiếp tục thất bại. trong khi nhập giurl. Bất kỳ ý tưởng?
manismku

Một ví dụ khác: Trong Docker-soạn có -f( --force) cờ mà làm việc như "auto-yes" cho lệnh remove một cái gì đó
luke

Làm thế nào để bạn "echo Y" một cách đệ quy trong trường hợp lời nhắc yêu cầu xác nhận nhiều lần?
Safak Ozkan

18

Bạn có thể không có khả năng cài đặt Expect trên máy chủ đích. Điều này thường xảy ra khi một người viết, chẳng hạn như một công việc của Jenkins.

Nếu vậy, tôi sẽ xem xét một cái gì đó giống như câu trả lời cho câu hỏi sau trên askubuntu.com:

/ubuntu/338857/automatically-enter-input-in-command-line

printf 'y\nyes\nno\nmaybe\n' | ./script_that_needs_user_input

Lưu ý rằng trong một số trường hợp hiếm hoi, lệnh không yêu cầu người dùng nhấn enter sau ký tự. trong trường hợp đó, hãy để lại những nét mới:

printf 'yyy' | ./script_that_needs_user_input

Để đầy đủ, bạn cũng có thể sử dụng tài liệu tại đây:

./script_that_needs_user_input << EOF
y
y
y
EOF

Hoặc nếu trình bao của bạn hỗ trợ nó, một chuỗi ở đây:

./script <<< "y
y
y
"

Hoặc bạn có thể tạo một tệp với một đầu vào trên mỗi dòng:

./script < inputfile

Một lần nữa, tất cả tín dụng cho câu trả lời này thuộc về tác giả của câu trả lời trên askubuntu.com , lesmana.


//, Hãy chắc chắn ủng hộ người dùng askubuntu.com @lesmana nếu bạn thích câu trả lời này.
Nathan Basanese

6

Mặc dù điều này có thể phức tạp / nặng hơn bạn muốn, nhưng có một cách rất linh hoạt để thực hiện nó là sử dụng một cái gì đó như Expect (hoặc một trong các dẫn xuất trong ngôn ngữ lập trình khác).

Expect là một ngôn ngữ được thiết kế đặc biệt để kiểm soát các ứng dụng dựa trên văn bản, đó chính là những gì bạn đang muốn làm. Nếu cuối cùng bạn cần làm điều gì đó phức tạp hơn (như với logic để thực sự quyết định phải làm gì / trả lời tiếp theo), thì Expect là con đường để đi.


6

Bạn chỉ cần đặt -y bằng lệnh cài đặt.

Ví dụ: yum install <package_to_install> -y


3

Nếu bạn chỉ muốn chấp nhận các giá trị mặc định, bạn có thể sử dụng:

\n | ./shell_being_run

//, Điều này có nghĩa là bạn sẽ chấp nhận các giá trị mặc định như thế nào?
Nathan Basanese

2
Trong bash, shvà hầu hết hệ thống, mà tôi biết, bạn cần phải làm echotheo \ncách khác, nếu không nó sẽ không được chuyển đến lệnh tiếp theo.
2i3r
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.