Uzupełnianie tabulatora powłoki Bash, nie rozwijaj ~

12

Często używam Tabklucza, gdy używam powłoki (bash).

Ale denerwuje mnie to, że ~zawsze się rozwija /home/"user". Nie sądzę, żeby zawsze tak było; czy jest jakiś sposób na powstrzymanie tego zachowania?

Przykład:

  1. cj@zap:~$ ls ~/
  2. naciśnij Tab
  3. cj@zap:~$ ls /home/cj/

Chciałbym nadal mieć, ~/a nie skończyć /home/cj/.

Johan
źródło
2
„Nie sądzę, że zawsze tak było”. - Programowalne zakończenie zastępuje ustawienie readline set expand-tilde off(domyślne lub ustawione w ~/.inputrc).
Wstrzymano do odwołania.
„bind -v | grep tylda” zwraca „ustaw rozwinięcie tylda wyłączone” ... więc nie sądzę, żeby to pomogło.
Johan
Możesz rzucić okiem shopt -p direxpand.
gam3

Odpowiedzi:

10

Wyłączenie rozszerzenia tyldy jest szybkie i bezbolesne. Otwórz ~/.bashrci wstaw to:

_expand()
{
    return 0;
}

Spowoduje to zastąpienie funkcji rozwijania z /etc/bash_completion. Polecam komentowanie tego, co robi nad funkcją, na wypadek, gdybyś chciał w przyszłości wrócić do rozszerzenia. Zmiany zaczną obowiązywać w nowej instancji.

John T.
źródło
choć _expand(){ true; }jest krótszy :)
tig
nie byłoby _expand(){ false; }? @tig
John T
2
@John: nie, to powinna być prawda. truezwraca wynik pomyślny, a wynik pomyślny to 0, więc return 0jest równy truestatusowi wyjścia i return 1jest równy false. po prostu spróbuj true; echo $?i false; echo $?.
tig
@tig za dużo programowania mnie pomyliło ... codepad.org/Frb3RyAN Podobnie, znajdziesz to w dużej ilości kodu (patrz góra): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Zakładałbym , że jest włączony w narzędziach GNU, aby wskazać bardziej realistyczne znaczenie, tj. „Prawda, program uruchomił się pomyślnie” lub „fałsz - program działał niepoprawnie”.
John T
@John: w porządku :), «Nawet John T może się mylić» (nie obrażaj się :))
tig
5

W przypadku nowszej wersji bash_completion wydaje się, że musisz również zastąpić __expand_tilde_by_ref:

__expand_tilde_by_ref() {
  return 0
}
mjmt
źródło
1

Jeszcze bardziej kompaktowo:

_expand() { :; }

... ponieważ „:” jest wbudowaną powłoką równoważną „true” :-)

Joe
źródło
1

Bardziej precyzyjne dostosowanie byłoby

_filedir_xspec () { :; }
Alexander Shcheblikin
źródło