Zsh's read
untuk beberapa alasan adalah gema ^M
bukannya menerima mereka sebagai <Enter>
penekanan tombol. (Jika -d
disetel, maka mereka dikenali sebagai <Enter>
milik, tetapi masih digaungkan.) Itu juga tidak mendukung dasar-dasar seperti tombol backspace.
Saya bisa menyiasati ini dengan meretas / menjalankan bash
,
> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a
eat cake
tapi saya bertanya-tanya apakah ada cara yang lebih bersih.
zsh
pemasangan 4.3.10 yang baru ;% read a
berfungsi dengan baik di sini.read
tidak bekerja pada mesin Linux.Jawaban:
Untuk memasukkan satu baris teks dengan nyaman di bawah zsh, gunakan
vared
. Menggunakanvared
alih-alihread
memanggil zle , yang setara dengan meneruskan-e
bash untuk memanggil readline.Perilaku yang Anda jelaskan dengan polos lebih
read
terlihat seperti terminal yang tidak terkonfigurasi daripada masalah shell. Jalankanstty -a
untuk menunjukkan pengaturan terminal Anda, dan pastikan bahwaeol
diatur ke^M
danerase
diatur dengan apa yang Backspacedikirimkan kunci Anda . Bergantung pada sistem operasi dan bagaimana pengaturannya dan pada terminal, Backspacemengirimkan salah satu^H
atau^?
. Pengaturan backspace biasanya salah karena beberapa file konfigurasi yang mencoba mengaturnya secara manual, jadi hal pertama yang harus Anda lakukan adalah melacak dan menghapus kesalahan konfigurasi tersebut. Jika Anda tidak menemukannya, tinjau pengaturan emulator terminal Anda untuk memastikannya tidak diatur ke mode kompatibilitas historis. Jika semuanya gagal, tambahkan sesuatu seperti ini ke~/.zshrc
:sumber
vared
builtin. Ternyata,zshzle
halaman manual pasti layak setidaknya membaca sekilas.