Jak zdobyć bash, aby przestał uciekać $ podczas zakładki?

38

Mam to w wierszu poleceń:

ln -sf $PWD/wine-

a następnie uderzyłem, Tababy uzupełnić nazwę pliku. We wcześniejszych wersjach Ubuntu to działało dobrze, aby uzupełnić wine-nazwę pliku (i jako efekt uboczny $PWDzostałby wówczas rozszerzony). Ale teraz zamienia to w

ln -sf \$PWD/wine-

co wcale nie mam na myśli i nic nie kończy, ponieważ plik nie zaczyna się dosłownie $.

Jak przywrócić ukończenie do mniej zepsutego zachowania?

set mówi mi, że są to moje bieżące ustawienia:

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
keturn
źródło
2
Jeśli ten błąd dotyczy Ciebie, rozważ głosowanie pod następującym adresem URL (wymaga zalogowania): bugs.launchpad.net/ubuntu/+source/bash/+bug/778627/...
cripton

Odpowiedzi:

36

Odkryłem, że wersje bash> = 4.2.29 mają nowe direxpandustawienie shopt. (Sprawdź man docs/bash.1, czy wypróbowałeś nową wersję bash lub zobacz wersję 1 z linii 8951 )

Jeśli ktoś używa Quantal Quetzal 12.10 lub w inny sposób otrzymuje (lub sprawdza i buduje) nowy bash, wówczas:

shopt -s direxpand

Daje mi zachowanie, którego chcę, potrzebuję i kocham.

Obejście: W międzyczasie Ctrl+ Alt+ Ezamiast Tabrobi to, czego chcę. Ale jest niezręczny.

BTW, Istnieje kilka wątków zwanych „pytaniem o rozszerzenie zmiennej tab bash?” w gnu.bash.bug . Po ich przeczytaniu znalazłem informacje tutaj.

Peter V. Mørch
źródło
2
wersja bash z direxpand wkracza do Precise (12.04): Zobacz bugs.launchpad.net/bugs/778627
keturn
7
Byłoby jeszcze lepiej, gdybym nie rozwinął mojej ogromnej ścieżki i mógłbym nadal używać zmiennej nieskasowanej z zakończeniem.
jozxyqk
@ jozxyqk Czy kiedykolwiek znalazłeś sposób, aby uzyskać tę funkcję bez ścieżki?
Ungeheuer
@Ungeheuer Obecnie używam bash 4.4.19na Ubuntu 18.04 i to po prostu działa. Nie jestem pewien, kiedy to się zmieniło.
jozxyqk
2

wyszukaj _filedir()w skrypcie bash_completion najwyższego poziomu i zmień wiersz

compopt -o filenames 2>/dev/null

do

compopt -o filenames -o noquote 2>/dev/null
MBA
źródło
W 12.04 GNU bash, wersja 4.2.25, ta sugestia daje błąd:compopt: noquote: invalid option name
arielf
1

Dla tych (jak ja) z 12.04 można użyć ~ + zamiast $ PWD ...

na przykład :

cd /bin
echo ~+/ls
/bin/ls
Tony
źródło
1

Nawet przy zaktualizowanym bashu $wciąż znajdowałem ucieczkę.

  • Usunięcie bash-completion (1:2.1-3.fc20)paczki
  • lub po prostu nie pozyskiwania /etc/bashrcod ~/.bashrcwydawało się to naprawić.

Podejrzewam, że teraz brakuje mi niektórych funkcji, do których zwykle jestem przyzwyczajony, ale jeszcze ich nie zauważyłem.


Alternatywne (przynajmniej dla Fedory 26), dodaj export BASH_COMPLETION_VERSINFO=0przed sourcingiem /etc/bashrc. To sprawia, że ​​problematyczny skrypt myśli, że został już pozyskany.

jozxyqk
źródło
0

Wyłączenie opcji powłoki „complete_fullquote” wykonuje następujące zadanie:

shopt -u complete_fullquote
Michael Ryan
źródło
$ shopt -u complete_fullquote -bash: shopt: complete_fullquote: niepoprawna nazwa opcji powłoki
Anton Gorev
0
shopt -u progcomp

Naprawiłem to, usunąłem też wiele „inteligentnych” opcji uzupełniania, które znalazłem na drodze, nie uzupełniając plików, o których wiem, że tam są, ponieważ głupota uważa, że ​​nie chcę ich jako argumentów dla konkretnego dowództwo. ARRRGH

użytkownik3080602
źródło