GNU/Linux >> Belajar Linux >  >> Ubuntu

Secara Otomatis Memasukkan Input Di Baris Perintah?

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.

Terkait:Bagaimana Cara Men-debug Suspend di Ubuntu?
Ubuntu
  1. Bagaimana Cara Melewati Argumen Baris Perintah Menjadi Skrip Shell?

  2. Jalankan Perintah Sekali Per Baris Input Pipa?

  3. Substitusi Parameter Bash:Baris Perintah Vs. Naskah?

  1. Aktifkan Addon Firefox Menggunakan Perintah?

  2. Akses Papan Klip Baris Perintah?

  3. Membuat Script Bash Pertama, Tidak Bisa Mendapatkan Perintah Cd Untuk 'menempel.'?

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Lewati Argumen Baris Perintah ke Skrip Bash?

  3. Bash Script - Cara Membaca Input Pengguna