Bash otomatis selesai untuk variabel lingkungan [ditutup]


25

Fitur bash autocomplete tampaknya tidak berfungsi dengan variabel lingkungan di 11.04. Perilaku saat ini ditunjukkan di bawah ini

export SCRIPT=/home/user/script
cd $SCRIPT/<tab>

hasil dalam backslash ( \) ditambahkan sebelum $SCRIPTyaitu prompt menjadi

cd \$SCRIPT/

Hal yang sama terjadi jika cddiganti dengan lsatau perintah lainnya

Juga, jika ada file yang dapat dieksekusi di jalur yang terkandung dalam $ SCRIPT dan saya ingin menjalankannya

$SCRIPT/<tab>

Bash tidak menunjukkan opsi di dalam folder (terlepas dari apakah ada satu file atau beberapa file / direktori di dalam path yang terdapat dalam variabel lingkungan).

Dengan kata lain, autocomplete tidak berfungsi dengan variabel lingkungan.


2

Saya pikir itu tidak ada hubungannya dengan versi bash (4.1 atau 4.2). Saya baru saja menginstal bash-4.1 dari sumber dan menggunakannya sebagai pengganti 4.2.24 (versi Ubuntu 12.04; diinstal dari sumber sehingga saya tidak perlu 'menahan' paket di setiap upgrade sys) dan perilaku persis sama. Sangat, sangat menjengkelkan ...

4
Pertanyaan ini tampaknya di luar topik karena ini tentang bug dalam rilis lama yang tidak didukung. Bug dijelaskan di sini dan telah diperbaiki pada 12,04 dan kemudian
Warren Hill

1
@ WarrenHill Ini mungkin di luar topik karena ini tentang bug (dan saya telah memilih untuk menutupnya karena alasan itu). Bahwa bug dalam rilis yang tidak didukung tidak relevan - kami tidak menutup pertanyaan lama yang memiliki jawaban di luar topik ketika tanggal EoL rilis yang terpengaruh datang. Hanya pertanyaan EOL baru / tidak dijawab yang di luar topik.
Eliah Kagan

Jawaban:


13

Bug ini diperkenalkan di bash 4.2. Ada utas panjang tentang hal itu di sini:

http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html

Singkatnya, Chet Ramey, pengembang bash, belum yakin bagaimana cara memperbaikinya.


Apakah ada cara untuk kembali ke bash 4.1?
nilchat

1
Perbaikan sedang dalam jalan: Chet menambahkan shopt "direxpand" untuk mengembalikan perilaku lama. Itu belum ada di Oneiric.
Nelson

8
Mengejutkan bagi saya bahwa begitu sedikit orang mengeluh tentang hal ini. Ini adalah perubahan besar dari cara bash bekerja selama beberapa tahun.
Scott C Wilson

11

Untuk mendapatkan kembali behaivior lama, gunakan perintah

shopt -s direxpand

atau memasukkannya ke dalam .bashrc

Jika Anda menggunakan .bashrc yang sama dengan versi bash yang berbeda, gunakan

if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
    then shopt -s direxpand
fi

1
Tes itu akan gagal untuk bash 5.0 dan 5.1.
Keith Thompson

8

Solusi yang disarankan di http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html adalah:

  1. gunakan <Tab>untuk melengkapi secara otomatis variabel lingkungan Anda seperti yang dikatakan baris perintahcd $MYVAR
  2. tekan <Esc>+ <Ctrl>-Euntuk memperluas baris perintah saat ini yaitu gantikan $MYVARdengan nilainya, path
  3. tambahkan a /lalu nikmati <Tab>pelengkapan otomatis seperti biasa

Ini mengasumsikan Anda berada dalam mode emacs ( set -o emacs) dan telah bash_completionmengatur dengan masuk akal untuk cd(misalnya complete -o nospace -F _cd cd).

Sayangnya ini tidak berfungsi dalam mode vi ( set -o vi) karena perluasan baris perintah tidak tersedia saat itu.


2

Setelah mengetikkan variabel shell

cd $SCRIPT/

ketik Cntrl-Alt-E. Ini memperluas variabel

cd /home/user/script/

Ini bekerja dengan EDITOR = vi di Fedora 16.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.