Saya menjalankan skrip yang diminta memasukkan 'y' pada setiap operasi, saya mencari solusi seperti $ ./script < echo 'yyyyyyyyyyyyyy'
untuk menyampaikan semua masukan saya dalam satu waktu.
Jawaban Terbaik
Ada perintah yang dibuat khusus untuk kasus itu:yes
$ yes | ./script
Apa yang dilakukan adalah menghubungkan output dari yes
ke input ./script
. Jadi ketika ./script
meminta input pengguna sebagai gantinya akan mendapatkan output yes
. Output dari yes
adalah aliran y
. yang tak ada habisnya diikuti oleh baris baru. Jadi pada dasarnya seolah-olah pengguna memasukkan y
untuk setiap pertanyaan ./script
.
Jika Anda ingin mengatakan tidak (n
) bukannya ya (y
) Anda dapat melakukannya seperti ini:
$ yes n | ./script
Perhatikan bahwa beberapa alat memiliki opsi untuk selalu mengasumsikan yes
sebagai jawaban. Lihat di sini misalnya:Lewati perintah ya/tidak di 'apt-get upgrade'
Metode lain untuk memasukkan input:
Jika Anda tahu persis berapa banyak y
skrip Anda mengharapkan Anda dapat melakukannya seperti ini:
$ printf 'ynynyn' | ./script
Baris baru (n
) adalah tombol enter.
Menggunakan printf
bukannya yes
Anda memiliki kontrol input yang lebih halus:
$ printf 'yesnnonmayben' | ./script
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
Demi kelengkapan, Anda juga dapat menggunakan dokumen di sini:
$ ./script << EOF
y
y
y
EOF
Atau jika shell Anda mendukung string di sini:
$ ./script <<< "y
y
y
"
Atau Anda dapat membuat file dengan satu input per baris:
$ ./script < inputfile
Jika perintahnya cukup rumit dan metode di atas tidak lagi memadai, Anda dapat menggunakan expect.
Berikut adalah contoh skrip ekspektasi yang sangat sederhana:
spawn ./script
expect "are you sure?"
send "yesr"
expect "are you really sure?"
send "YES!r"
expect eof
Nitpick teknis:
Permintaan perintah hipotetis yang Anda berikan dalam pertanyaan Anda tidak berfungsi:
$ ./script < echo 'yyyyyyyyyyyyyy'
bash: echo: No such file or directory
Ini karena tata bahasa shell memungkinkan operator redirect di mana saja di baris perintah. Sejauh menyangkut shell, baris perintah hipotetis Anda sama dengan baris ini:
$ ./script 'yyyyyyyyyyyyyy' < echo
bash: echo: No such file or directory
Artinya ./script
akan dipanggil dengan argumen 'yyyyyyyyyyyyyy'
dan stdin akan mendapatkan input dari file bernama echo
. Dan bash mengeluh karena file tidak ada.