Funkcja autouzupełniania bash nie wydaje się działać ze zmiennymi środowiskowymi w 11.04. Obecne zachowanie pokazano poniżej
export SCRIPT=/home/user/script
cd $SCRIPT/<tab>
skutkuje \
dodaniem ukośnika odwrotnego ( ) przed, $SCRIPT
tzn. pojawia się monit
cd \$SCRIPT/
To samo dzieje się, jeśli cd
zostanie zastąpione przez ls
dowolne inne polecenie
Ponadto, jeśli w ścieżce zawartej w $ SCRIPT znajduje się plik wykonywalny i chcę go uruchomić
$SCRIPT/<tab>
Bash nie pokazuje opcji w folderze (niezależnie od tego, czy w ścieżce zawartej w zmiennych środowiskowych jest jeden plik czy wiele plików / katalogów).
Innymi słowy, autouzupełnianie nie działa ze zmiennymi środowiskowymi.
11.04
bash
environment-variables
nilchat
źródło
źródło
Odpowiedzi:
Ten błąd został wprowadzony w wersji bash 4.2. Jest tutaj długi wątek:
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html
Krótko mówiąc, Chet Ramey, twórca bash, nie jest jeszcze pewien, jak to naprawić.
źródło
Aby odzyskać stare zachowanie, użyj polecenia
lub dołącz to do swojego
.bashrc
Jeśli używasz tego samego .bashrc z różnymi wersjami bash, użyj
źródło
Obejście zaproponowane w http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html to:
<Tab>
do automatycznego uzupełnienia zmiennej środowiskowej, o której mówi wiersz poleceńcd $MYVAR
<Esc>
+,<Ctrl>-E
aby rozwinąć bieżący wiersz polecenia, tzn. zastąp$MYVAR
jego wartością ścieżkę/
a następnie korzystaj z<Tab>
automatycznego uzupełniania jak zwykleZakłada się, że jesteś w trybie emacsa (
set -o emacs
) ibash_completion
rozsądnie skonfigurowałeścd
(npcomplete -o nospace -F _cd cd
.).Niestety nie działa to w trybie vi (
set -o vi
), ponieważ wówczas rozszerzenie wiersza poleceń nie jest dostępne.źródło
Po wpisaniu zmiennej powłoki
wpisz Cntrl-Alt-E. To rozszerza zmienną
Działa to z EDITOR = vi w Fedorze 16.
źródło