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


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.


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
}

1

Noch kompakter:

_expand() { :; }

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


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.