Bash-Shell-Tab-Vervollständigung, erweitern Sie nicht die ~

12

Ich benutze den TabSchlüssel oft, wenn ich die Shell (Bash) benutze.

Aber ich ärgere mich, dass es ~immer erweitert wird /home/"user". Ich glaube nicht, dass es immer so war. Gibt es eine Möglichkeit, dieses Verhalten zu stoppen?

Ein Beispiel:

  1. cj@zap:~$ ls ~/
  2. Drücken Sie Tab
  3. cj@zap:~$ ls /home/cj/

Ich möchte weiterhin haben ~/und nicht mit enden /home/cj/.

Johan
quelle
2
"Ich glaube nicht, dass es immer so war." - Die programmierbare Vervollständigung überschreibt die Readline-Einstellung set expand-tilde off(Standardeinstellung oder Einstellung ~/.inputrc).
Bis auf weiteres angehalten.
"bind -v | grep tilde" gibt "set expand-tilde off" zurück ... also denke ich nicht, dass es helfen wird.
Johan
Sie könnten einen Blick darauf werfen shopt -p direxpand.
Gam3

Antworten:

10

Das Deaktivieren der Tilde-Erweiterung ist schnell und schmerzlos. Öffnen Sie ~/.bashrcund fügen Sie dies ein:

_expand()
{
    return 0;
}

Dadurch wird die Erweiterungsfunktion von überschrieben /etc/bash_completion. Ich würde empfehlen, zu kommentieren, was es über der Funktion tut, falls Sie die Erweiterung in Zukunft wieder wünschen. Änderungen werden in einer neuen Instanz wirksam.

John T.
quelle
obwohl _expand(){ true; }ist kürzer :)
tig
wäre es nicht _expand(){ false; }? @tig
John T
2
@ John: Nein, es sollte wahr sein. trueGibt ein erfolgreiches Ergebnis zurück und das erfolgreiche Ergebnis ist 0, entspricht also return 0dem trueExit-Status und return 1ist gleich false. versuche es einfach true; echo $?und false; echo $?.
Tig
@tig zu viel Programmierung hat mich verwirrt ... codepad.org/Frb3RyAN Ebenso finden Sie dies in viel Code (siehe oben): cs.nthu.edu.tw/~tingting/DS_mid_solution.pdf Ich würde annehmen, dass es eingeschaltet ist in den GNU-Tools, um eine realistischere Bedeutung anzugeben, dh "Richtig, das Programm wurde erfolgreich ausgeführt" oder "falsch - das Programm wurde falsch ausgeführt".
John T
@ John: das ist ok :), «Auch John T kann sich irren» (nicht beleidigt sein :))
tig
5

Bei neuerer bash_completion müssen Sie anscheinend auch __expand_tilde_by_ref überschreiben:

__expand_tilde_by_ref() {
  return 0
}
mjmt
quelle
1

Noch kompakter:

_expand() { :; }

... als ":" ist eine Shell eingebaut, die "true" entspricht :-)

Joe
quelle
1

Eine genauere Anpassung wäre

_filedir_xspec () { :; }
Alexander Shcheblikin
quelle