Chuẩn bị câu trả lời cho các câu hỏi của một lệnh


14

Giả sử tôi muốn viết một tập lệnh shell thực thi chỉ một lệnh. Nhưng lệnh này được thiết kế kém. Nó không cung cấp bất kỳ tùy chọn dòng lệnh nào; thay vào đó, nó hỏi một số câu hỏi và chờ đợi đầu vào của người dùng.

Có cách nào để chuẩn bị đầu vào này trong kịch bản, vì vậy các câu hỏi được trả lời tự động?

Câu trả lời:


16

Nếu lệnh không quá cầu kỳ, nó sẽ hoạt động với thứ như thế này:

command > /dev/null << EOF
<answer 1>
<answer 2>
<answer 3>
EOF

Điều này đòi hỏi bạn phải biết câu trả lời chính xác trước.


Bạn có thể sử dụng câu trả lời ở trên để thiết kế một kịch bản gói. Kịch bản mới sẽ lắng nghe các tham số và gọi lệnh cũ với phương thức trên.
Walter A

Còn được gọi là tài liệu TẠI ĐÂY, để biết thêm thông tin, bạn có thể thử Wikipedia tại đây định nghĩa tài liệu
OldTimer

15

Mong đợi có thể làm điều đó. Từ trang web Mong đợi :

Expect là một công cụ để tự động hóa các ứng dụng tương tác như telnet, ftp, passwd, fsck, rlogin, tip, v.v ... Expect thực sự làm cho công cụ này trở nên tầm thường. Mong đợi cũng hữu ích để thử nghiệm các ứng dụng tương tự [...] "

Nó đi kèm với rất nhiều trợ giúp, như tự động khai thác .

Một lần nữa từ trang web Mong đợi,

tự động khai thác đồng hồ bạn tương tác với một chương trình khác và tạo tập lệnh Expect tái tạo các tương tác của bạn. Đối với các tập lệnh đường thẳng, tự động khai thác tiết kiệm thời gian đáng kể so với việc viết tập lệnh bằng tay.


Cảm ơn về câu trả lời của bạn. Vì nhu cầu của tôi rất thấp, Mong đợi là quá mức trong trường hợp của tôi. Bjorns trả lời hoàn toàn phù hợp với nhu cầu của tôi. Nhưng tôi khuyên bạn nên giữ câu trả lời của mình cho những người khác đang cần một giải pháp phức tạp hơn.
tmuecksch

+1 vì tôi không biết tự động tồn tại và đã nhận ra rằng đường cong học tập kỳ vọng quá khó để tôi bận tâm. Tôi sẽ xem xét lại.
Joe

7

Nếu tập lệnh của bạn mong đợi một câu trả lời được trả lời hoặc một vài lời nhắc trong đó bạn có thể đưa ra cùng một câu trả lời, thì có yes:

NAME
       yes - output a string repeatedly until killed

SYNOPSIS
       yes [STRING]...
       yes OPTION

DESCRIPTION
       Repeatedly output a line with all specified STRING(s), or `y'.

Sử dụng nó như thế này:

yes Me | give_a_hug.sh

3
Một cách sử dụng phổ biến mặc dù mỉa mai là yes n, ví dụ:yes n | mv -i * somewhere/
Sam Watkins
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.