Bagaimana cara saya menjawab y dalam skrip bash secara otomatis?


14

Saya ingin menghapus beberapa program melalui skrip bash. Setelah saya menjalankan perintah, terminal bertanya apakah saya yakin saya ingin menghapusnya. Jadi saya perlu menjawab y. Saya ingin melakukannya secara otomatis dan menjawab ysetelah penundaan 10 detik.

Saya melakukan contoh ini tetapi tidak berhasil -

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

Ada ide? Centos 7.2


6
ITYM, #! /bin/bash -bukannya#!/usr/bin
Stéphane Chazelas

periksa apakah uninstallprogram menerima parameter atau skrip konfigurasi atau tidak. Akan lebih mudah seperti itu
phuclv

1
Ditanyakan dan dijawab mual iklan di seluruh web. " Ini tidak berfungsi" bukanlah deskripsi masalah yang baik. Mungkin Anda dapat menyatakan bagaimana masalah Anda berbeda dari yang lain yang tak terhitung jumlahnya.

2
Apa yang sebenarnya dilakukan skrip Anda: jalankan uninstalldan tunggu sampai keluar. Kemudian tidur 10 detik. Kemudian gema y\nke stdout (yang masih terhubung ke terminal, bukan ke stdin dari program apa pun)
Peter Cordes

Jawaban:


46

Untuk itulah yesperintah itu. Ini menghasilkan ysatu per baris tanpa batas sehingga dapat disalurkan ke perintah yang menanyakan pertanyaan ya / tidak.

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

Itu menjawab ysemua pertanyaan. Untuk menjawab nsemua pertanyaan, ganti yesdengan yes n. Untuk campuran ydan n, Anda dapat mengganti yesdengan:

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

Atau jalankan sebagai:

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

Jika Anda perlu jawaban tidak tersedia untuk dibaca sebelum 10 detik, Anda akan melakukannya:

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

Tapi itu mungkin tidak perlu, ketika kita menulis yke pipa, itu akan ada di sana untuk uninstallmembacanya kapan pun dia ingin membacanya, tidak mungkin Anda harus menunggu sampai siap untuk membacanya. Pengecualiannya adalah jika uninstallmemutuskan untuk menyiram input sebelum mengajukan pertanyaan.

Semua orang menganggap uninstallperintah hanya membaca setiap jawaban sebagai satu baris input dari input standarnya.

Untuk kasus yang lebih kompleks, di mana perintah membaca jawaban langsung dari perangkat tty atau di mana Anda perlu jawaban pakan kondisional (misalnya berdasarkan apa output perintah), yang mana Anda akan menggunakan hal-hal seperti expectatau zsh's zpty.

Perhatikan bahwa banyak program interaktif dapat memasuki beberapa mode non-interaktif ketika melewati beberapa opsi. Anda mungkin ingin memeriksa manualnya terlebih dahulu, sebelum menghabiskan terlalu banyak upaya untuk menyelesaikan masalah.


Terima kasih! Ini bagus jika kita perlu menjawab hanya untuk satu pertanyaan. Apa yang terjadi jika kita harus menjawab 20 pertanyaan misalnya?
Shalev Sason

@ Shalev, lihat edit.
Stéphane Chazelas

Terima kasih! Jadi jika saya ingin memasukkan nilai lain seperti interger (2 misalnya) saya perlu menggantinya daripada "y"? printf '% s \ n' ynnyyn 2 3 ny | / opt / MNG / MNGVIEWHP / fe / uninstall
Shalev Sason

Ya, itulah idenya.
Stéphane Chazelas

3
@ShalevSason, dalam semua solusi yang saya berikan, seperti echo "y", setiap kali, kami menulis y<newline>, mensimulasikan Anda menekan ydiikuti oleh Enter. Jika Anda ingin mensimulasikan menekan Enter sendirian, itu akan memberi makan baris kosong, jadi printf '%s\n' y n '' 2 3(di mana ''baris kosong).
Stéphane Chazelas
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.