Bash pelengkapan otomatis untuk variabel lingkungan yang menyimpan nama direktori

10

Saya menggunakan, antara lain, bash 4.2.37 di Linux Mint 14.

Saat saya melengkapi nama variabel lingkungan secara otomatis dengan mengetik Tab, nama itu akan diperluas ke nama variabel yang diikuti oleh spasi.

Jika nilai variabel kebetulan menjadi nama direktori, saya ingin itu diperluas ke nama variabel diikuti oleh /.

Misalnya, jika saya mengetik:

$ ls $HOM<tab>

itu berkembang menjadi:

$ ls $HOME _

di mana _menandai lokasi kursor. Masalahnya adalah bahwa saya kemudian biasanya ingin terus mengetik nama beberapa file atau direktori di bawah direktori home saya, yang berarti saya harus mengetik backspacedan kemudian /.

Jadi saya ingin hal di atas meluas ke:

$ ls $HOME/_

Hal yang sama terjadi ketika saya mengetik seluruh nama variabel; setelah itu ls $HOME, tabtambahkan spasi, dan saya ingin menambahkan /.

(Dan tentu saja saya tidak ingin menambahkan /jika nilai variabel bukan nama direktori.)

Apakah ada cara saya dapat memberitahu bash untuk berperilaku seperti yang saya inginkan, baik melalui perintah bash atau dengan memperbarui saya $HOME/.inputrc?

Catatan: Saya secara khusus mencari cara untuk tabberperilaku seperti yang saya inginkan. Cara untuk mencapai perilaku yang sama dengan penekanan tombol yang berbeda akan menarik, tetapi tidak akan menjawab pertanyaan saya.

(Saya telah menonaktifkan /etc/profile.d/bash_completion.shsistem saya karena berinteraksi dengan buruk set -o nounset. Eksperimen cepat menunjukkan bahwa ini mungkin tidak relevan dengan pertanyaan saya.)

Kebetulan, tcsh melakukan ini: diberi variabel lingkungan $FOOBAR, pengetikan $FOOBA<tab>akan diperluas $FOOBAR/jika merujuk ke direktori, $FOOBAR(dengan spasi) jika tidak. Tidak, itu tidak cukup untuk membujuk saya untuk kembali ke tcsh. zsh juga melakukan ini.

Keith Thompson
sumber
+1 Jika Anda merasa ingin bertualang, inilah kodenya .
l0b0
@ l0b0: (a) Saya sudah memilikinya. (b) aku tidak merasa cukup bahwa petualang. (c) Ini seharusnya merupakan penyelesaian yang dapat diprogram .
Keith Thompson

Jawaban:

6

Fitur ini diimplementasikan dalam bash 4.3, dirilis 2014-02-26.

Mengutip NEWSfile (termasuk di tingkat atas bash-4.3.tar.gz, lihat juga tanda tangan GPG ):

Kode penyelesaian kata memeriksa apakah nama file yang berisi variabel shell diperluas ke nama direktori dan ditambahkan /ke kata yang sesuai. Kode yang sama memperluas variabel shell dalam nama perintah saat melakukan penyelesaian perintah.

Eksperimen cepat dengan salinan yang dibuat dari sumber menunjukkan bahwa jika saya mengetik

$ ls $HOM<tab>

sekarang diperluas ke

$ ls $HOME/

(Kebetulan, zsh juga melakukan ini.)

Keith Thompson
sumber
1
Harus menginstal bash secara manual untuk ini. 4.3 tidak ada dalam fedora 20 repos.
jozxyqk