Saya menggunakan bash 4.3.11 (1) dan memasang plugin riwayat berikut (via .bash_it ):
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
bind '"^[[B":history-search-forward'
Ketika saya masuk ke sesi interaktif semuanya baik-baik saja tetapi ketika saya menjalankan perintah jarak jauh ssh host 'ls -als'
misalnya, saya melihat output berikut:
: ssh host 'ls -als'
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 3: bind: warning: line editing not enabled
/home/ubuntu/.bash_it/plugins/enabled/history.plugin.bash: line 4: bind: warning: line editing not enabled
Ketika saya memodifikasi plugin riwayat dengan echo -e '\0033\0143'
setelah setiap panggilan mengikat saya tidak lagi mendapatkan peringatan tetapi konsol saya dihapus. Bukan kelemahan besar tetapi akan menyenangkan untuk mengetahui cara yang lebih bersih untuk menekan ini untuk perintah jarak jauh.
# Works, but annoyingly clears console
# enter a few characters and press UpArrow/DownArrow
# to search backwards/forwards through the history
bind '"^[[A":history-search-backward'
echo -e '\0033\0143'
bind '"^[[B":history-search-forward'
echo -e '\0033\0143'
Memiliki sesi interaktif tidak cukup untuk
bind
bekerja. Misalnya shell emacs menyediakan sesi interaktif yang lulusif [ -t 1 ]
tes tetapi tidak memiliki pengeditan baris sehingga semua yang adabind
di Anda~/.bashrc
akan menghasilkan peringatan. Sebagai gantinya, Anda dapat memeriksa apakah pengeditan baris diaktifkan dengan melakukan sesuatu seperti ini (apakah ada cara yang lebih sederhana / lebih baik?):sumber
[[ ${SHELLOPTS} =~ (vi|emacs) ]] && echo 'line-editing on' || echo 'line-editing off'
Masukkan perintah bind ke dalam pernyataan 'jika' yang memeriksa apakah sesi bash memungkinkan pengeditan baris:
sumber
Jika tidak ada pengeditan baris,
bind
perintah ini sendiri tidak berbahaya. Menekan peringatan:Ini agak tidak sopan, masih harus bekerja. Jawaban lain tidak setuju tentang tes terbaik / cukup. Pendekatan saya mengelak dari ini. Itu tidak skala dengan baik. Kedua perintah itu sendiri seharusnya tidak membuat perbedaan besar; tetapi jika Anda memiliki lebih banyak, seperti lusinan, maka persyaratan yang tepat mungkin akan lebih baik.
sumber