Seltsames Verhalten der automatischen Vervollständigung

Seltsames Verhalten der automatischen Vervollständigung

Also... ich bin so verwirrt, denn das einzige wirkliche Problem in meinem Fall ist das verdammte Apostroph (').
Situation:Die erweiterte PATH-Variable beeinflusst die Wortvervollständigung, je nachdem, ob sich im zusätzlichen Pfad Apostrophe befanden oder nicht.
Beispiel:Ich habe eine EXE-Datei (mit dem Namen „deadbeef“) mit entsprechenden EXE-Rechten, deren Pfad zwei Apostrophe enthält:
/home/mallniya/hard'n'soft/soft/gnu-linux/portable/deadbeef-0.6.0
Speziell für ein Experiment habe ich die gleiche Datei in den
/home/mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
Wenn ich den ersten Pfad in die Variable $PATH exportiere, erfolgt keine automatische Vervollständigung in Bash, im zweiten Fall jedoch schon. Wenn ich im Terminal die ersten Buchstaben des Programms im exportierten Verzeichnis eingebe
tot[TAB]
Im ersten Fall gibt es keine Vervollständigung, aber wenn ich TAB mit demselben Wort im zweiten Fall verwende, funktioniert es.
Aber wenn ich den Befehl „deadbeef“ im ersten Fall manuell eingebe, wird er auch ausgeführt.
Außerdem werden beidewelcheUndTypBefehle sagen, dass die EXE-Datei in beiden Fällen vorhanden ist.
Also, wo liegt das Problem??? Warum verarbeitet Bash die Apostrophe auf diese Weise?

Antwort1

Apostrophe sind in fast allen Shells Sonderzeichen (Shell ist der Begriff für Kommandozeileninterpreter, also für Programme, die Ihre Eingaben lesen und das Entsprechende kopieren).

Kurze Antwort: tun Sie das nicht. Wie bei Leerzeichen sollten Sie Dateinamen mit besonderer Bedeutung oder Sonderzeichen besser vermeiden.

Lange Antwort: wenn Sie Apostrophe verwenden möchten, müssen Sie "Zitat" (mit Sonderzeichen, die die Shell daran hindern, sie zu interpretieren). Die Autovervollständigung zitiert sie bei Bedarf automatisch ... Beispiel:

(0)samsung-romano:~/tmp/try% touch "hard'n'soft"

Eine Möglichkeit, einfache Anführungszeichen zu setzen, ist die Verwendung von doppelten Anführungszeichen. (Und umgekehrt, obwohl das komplexer ist.)

(0)samsung-romano:~/tmp/try% ls
hard'n'soft

Wenn Sie nun Folgendes schreiben cat hardund drücken TAB:

(0)samsung-romano:~/tmp/try% cat hard\'n\'soft 

Backslashes sind eine weitere Form, das folgende Zeichen zu zitieren.

Antwort2

Nun, wie vom Bash_Completion-Team empfohlen, habe ich dieses Verhalten dem Bash-Team gemeldet und ihre Antwort lautet:
„Danke für den Bericht. Dies wird in Bash-4.3 behoben.“
sieht so aus, als sei der Fehler bereits bekannt und wir sollten einfach abwarten.

Antwort3

Um einen Pfad mit Apostrophen zu erweitern, fügen Sie vor dem Pfad ein " hinzu.

cd "/home/mallniya/hard

wird bei der Tab-Erweiterung problemlos erweitert.

verwandte Informationen