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/.


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.


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
}

1

Jeszcze bardziej kompaktowo:

_expand() { :; }

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.