Bagaimana cara menyajikan input yang dapat diedit kepada pengguna dengan BASH dan ZSH?

Saya perlu menerima masukan pengguna dalam skrip shell yang dapat berjalan di BASH dan ZSH. Saya terbiasa menggunakan readline dalam bahasa lain, tetapi ini sepertinya bukan pilihan yang tepat dalam skrip shell.

Contoh promptnya mungkin:

Please enter the value> 1234_

Bagaimana saya bisa menyajikan kepada pengguna input yang dapat diedit yang memiliki nilai default yang dapat diedit (backspace) yang kompatibel dengan kedua shell?


person ylluminate    schedule 13.06.2019    source sumber
comment
Dengan pesta: read -e -p 'Please enter the value> ' -i '1234'   -  person Cyrus    schedule 13.06.2019
comment
Untuk zsh, Anda mungkin ingin melihat vared bawaan modul ZLE . Itu dugaannya, i=1234; vared -p 'Please enter the value> ' i   -  person Toby Speight    schedule 13.06.2019
comment
Tidak ada apa pun yang dapat berfungsi di kedua shell, karena setiap shell menggunakan editor baris yang berbeda (Readline untuk bash, ZLE untuk zsh).   -  person chepner    schedule 13.06.2019
comment
@Cyrus Terima kasih! Anda membuat hari saya menyenangkan :-) Anda mungkin juga ingin memasukkan variabel (misalnya, disebut jawaban) di mana Anda menyimpan masukan pengguna: read -e -p 'Please enter the value> ' -i '1234' answer menghasilkan sesuatu seperti: Please enter the value> 1236. Tampilkan input pengguna yang diedit seperti: echo "$answer" 1236   -  person Bernie Reiter    schedule 16.07.2020
comment
@BernieReiter: Ini tentu saja mungkin tetapi tidak mutlak diperlukan. Jika tidak ada variabel yang ditentukan, read menggunakan variabel REPLY. Kode tersebut tentu saja lebih mudah dipahami jika Anda menentukan suatu variabel.   -  person Cyrus    schedule 16.07.2020
comment
@Cyrus Sekali lagi terima kasih! Pelajari setiap hari sesuatu yang baru dan bermanfaat :-)   -  person Bernie Reiter    schedule 16.07.2020


Jawaban (1)


Jika saya tidak salah paham ... Dalam hal fungsionalitas "Backspace", untuk menghapus karakter terakhir dan menambahkan beberapa karakter baru .. Ini berfungsi di kedua shell dengan "baca" sederhana di skrip.

echo -n "Enter value > "
read v
echo $v

Jika Anda memiliki masalah lain, bisakah Anda menyusun ulang pertanyaan Anda agar lebih jelas? Apa yang Anda gunakan (Kode Contoh). Apa sebenarnya yang Anda lakukan dalam hal pengeditan (hanya BS atau yang Anda maksud adalah perintah pengeditan baris CTRL-A, dll) Apa hasil/kesalahannya, apa yang ingin Anda perbaiki. Terima kasih.

person ennox    schedule 13.06.2019
comment
Saya tidak tahu zsh sama sekali, tapi dari perspektif Bash: echo -n non-portabel; read selain di awal baris akan membingungkan gagasan readline tentang posisi kolom. Itu sebabnya read memiliki opsi -p. - person Toby Speight; 13.06.2019
comment
Ini tidak memberikan nilai awal, yang merupakan poin utama pertanyaan. - person Toby Speight; 13.06.2019