Persiapkan jawaban untuk pertanyaan tentang suatu perintah

14

Katakanlah saya ingin menulis skrip shell yang mengeksekusi hanya satu perintah. Tetapi perintah ini dirancang dengan buruk. Itu tidak menawarkan opsi baris perintah apa pun; alih-alih menanyakan beberapa pertanyaan dan menunggu input pengguna.

Apakah ada cara untuk menyiapkan input ini dalam skrip, sehingga pertanyaan dijawab secara otomatis?

tmuecksch
sumber

Jawaban:

16

Jika perintahnya tidak terlalu pilih-pilih itu harus bekerja dengan sesuatu seperti ini:

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

Ini mengharuskan Anda mengetahui jawaban yang tepat sebelumnya.

Bjorn Munch
sumber
Anda dapat menggunakan jawaban di atas untuk merancang skrip pembungkus. Script baru harus mendengarkan parameter dan memanggil perintah lama dengan metode di atas.
Walter A
Juga dikenal sebagai dokumen DI SINI, untuk informasi lebih lanjut Anda dapat mencoba Wikipedia definisi dokumen di sini
OldTimer
15

Harapkan bisa melakukan itu. Dari situs web Expect :

Harapkan adalah alat untuk mengotomatisasi aplikasi interaktif seperti telnet, ftp, passwd, fsck, rlogin, tip, dll. Harapkan benar-benar membuat hal-hal ini sepele. Harapkan juga berguna untuk menguji aplikasi yang sama ini [...] "

Muncul dengan banyak bantuan, seperti autoexpect .

Lagi dari situs web Expect,

autoexpect melihat Anda berinteraksi dengan program lain dan membuat skrip Expect yang mereproduksi interaksi Anda. Untuk skrip garis lurus, ekspektasi otomatis menghemat banyak waktu daripada menulis skrip dengan tangan.

Christopher
sumber
Terima kasih atas jawaban Anda. Karena kebutuhan saya sangat rendah, Harapkan terlalu banyak dalam kasus saya. Jawaban Bjorns sangat sesuai dengan kebutuhan saya. Tapi saya sarankan untuk menjaga jawaban Anda untuk orang lain yang membutuhkan solusi yang lebih kompleks.
tmuecksch
+1 karena saya tidak tahu autoexpect ada dan menduga bahwa kurva belajar ekspektasi terlalu curam untuk saya perhatikan. Saya akan melihat lagi.
Joe
7

Jika skrip Anda mengharapkan satu prompt dijawab, atau beberapa prompt di mana Anda dapat memberikan jawaban yang sama, ada 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'.

Gunakan seperti ini:

yes Me | give_a_hug.sh
unperson325680
sumber
3
Penggunaan ironis yang umum adalah yes n, misalnya:yes n | mv -i * somewhere/
Sam Watkins