Bagaimana cara menulis jawaban "ya" untuk menginstal program?

113

Saya bekerja dengan instans Amazon Linux dan saya memiliki beberapa skrip untuk mengisi data dan menginstal semua program yang saya gunakan, tetapi beberapa program bertanya:

Do you want to continue [Y/n]?

dan jeda penginstalan. Saya ingin otomatis menjawab "Y" dalam semua kasus, sekarang saya yakin bagaimana melakukannya.

pengguna974887
sumber
3
Manajer paket mungkin memiliki tanda --nopromptatau --noconfirmyang dapat Anda gunakan.
Blender

Jawaban:

209

Perintah 'ya' akan menggema 'y' (atau apa pun yang Anda minta) tanpa batas. Gunakan sebagai:

yes | command-that-asks-for-input

atau, jika huruf kapital 'Y' diperlukan:

yes Y | command-that-asks-for-input
PT
sumber
apakah ini hanya bekerja dengan beberapa perintah yang didukung untuk menggunakan input dari ya, bukan? Saya mencoba dengan pandangan sekilas dari OpenStack dan ini tidak berhasil, saya pikir Expect lebih tepat untuk semua keadaan
HVNSweeting
1
//, Bagaimana jika Anda harus memasukkan kata "ya" secara lengkap?
Nathan Basanese
1
Berhati-hatilah yeskarena diketahui memaksimalkan CPU. stackoverflow.com/a/18164007/720665
David Salamon
Bagus. Ini hanya membuat hidup saya jauh lebih mudah. : D. Juga googling -yuntuk skrip bash itu SULIT.
Nathan Smith
1
@DavidSalamon itu hanya terjadi ketika menulis sesuatu tanpa batas, seperti /dev/nullatau STDOUT. Disalurkan ke sebuah perintah, itu hanya akan menulis satu baris ke pipa setiap kali perintah penerima membaca satu, dan akan menunggu sebaliknya.
Walf
68

echo y | command harus bekerja.

Selain itu, beberapa penginstal memiliki tanda "ya otomatis". Ini -yuntuk apt-getdi Ubuntu.

Dennis
sumber
Saya mencoba melakukan echo "giturl no" | jspm registry buat registry_name jspm-git di skrip shell saya. tapi terus gagal. saat memasuki giurl. Ada ide?
manismku
Contoh lain: Di docker-compose ada -f( --force) flag yang berfungsi sebagai "auto-yes" untuk perintah yang menghapus sesuatu
luke
Bagaimana Anda melakukan "echo Y" secara rekursif jika prompt meminta konfirmasi lebih dari sekali?
Safak Ozkan
18

Anda mungkin tidak memiliki kemampuan untuk menginstal Expect di server target. Ini sering terjadi ketika seseorang menulis, katakanlah, pekerjaan Jenkins.

Jika demikian, saya akan mempertimbangkan sesuatu seperti jawaban berikut ini di askubuntu.com:

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

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

Perhatikan bahwa dalam beberapa kasus yang jarang terjadi, perintah tidak mengharuskan pengguna untuk menekan enter setelah karakter. dalam hal ini tinggalkan baris baru:

printf 'yyy' | ./script_that_needs_user_input

Demi kelengkapan Anda juga bisa menggunakan dokumen di sini:

./script_that_needs_user_input << EOF
y
y
y
EOF

Atau jika shell Anda mendukungnya, string di sini:

./script <<< "y
y
y
"

Atau Anda dapat membuat file dengan satu input per baris:

./script < inputfile

Sekali lagi, semua kredit untuk jawaban ini diberikan kepada penulis jawaban di askubuntu.com , lesmana.

Nathan Basanese
sumber
//, Pastikan untuk memberi suara positif pada pengguna askubuntu.com @lesmana jika Anda menyukai jawaban ini.
Nathan Basanese
6

Meskipun ini mungkin lebih rumit / lebih berat daripada yang Anda inginkan, satu cara yang sangat fleksibel untuk melakukannya adalah menggunakan sesuatu seperti Expect (atau salah satu turunannya dalam bahasa pemrograman lain).

Expect adalah bahasa yang dirancang khusus untuk mengontrol aplikasi berbasis teks, persis seperti yang ingin Anda lakukan. Jika Anda akhirnya perlu melakukan sesuatu yang lebih rumit (seperti dengan logika untuk benar-benar memutuskan apa yang harus dilakukan / menjawab selanjutnya), Harapkan adalah cara yang tepat.

Adam Batkin
sumber
6

Anda hanya perlu meletakkannya -ydengan perintah install.

Sebagai contoh: yum install <package_to_install> -y

Rohan Seth
sumber
3

Jika Anda hanya ingin menerima default, Anda dapat menggunakan:

\n | ./shell_being_run
warhansen
sumber
//, Bagaimana ini berarti Anda menerima default?
Nathan Basanese
2
Dalam bash, shdan kebanyakan sistem, yang saya tahu, Anda perlu echoyang \njika tidak maka tidak akan pipa ke perintah berikutnya.
2i3r