Ich habe Benutzerzugriff (kein Root) auf einen Linux-Computer (Suse), auf dem ich einige Bash-Skripte und die entsprechenden Regeln für die automatische Vervollständigung von Bashs entwickelt habe.
Da die Skripte nur meinem Benutzer gehören und ich daher die vollständigen Regeln nur "aktiv" für mich brauche (ein Teil der Tatsache, dass ich keinen Root-Schreibzugriff habe), /etc/bash_completion.d/
ist es keine Option , mein bash_completion-Skript in einem Ordner abzulegen .
Im Moment habe ich meine Datei benannt .bash_completion.myscript
und sie direkt von meiner Quelle bezogen .bashrc
, aber ich frage mich nur, ob es einen anderen "Standard" Weg gibt, um diese Ergebnisse zu erzielen, der bereits in der Bash-Implementierung berücksichtigt wurde.
Zum Beispiel einen Ordner erstellen /home/myuser/.bash_completion.d/
?
quelle
.bash_completion
es sich um eine Datei und nicht um ein Verzeichnis handelt. Dabash_completion.d
es sich um ein Verzeichnis handelt, ging ich davon aus, dass ich nurscp
mein lokales Verzeichnisbash_completion.d
auf dem Remote-Server umbenennen und es beim nächsten Anmelden als Datei angeben könnte.So kann ein lokaler Benutzer ein Arbeitsverzeichnis haben
~/.bash_completion.d/
.Datei bearbeiten:,
nano ~/.bash_completion
fügen Sie Folgendes hinzu:Verzeichnis erstellen:
mkdir ~/.bash_completion.d
Datei bearbeiten:,
~/.bash_completion.d/myscript
fügen Sie Folgendes hinzu:Quelle .bash_completion:
. ~/.bash_completion
Aktualisieren
Wenn Sie ein leeres
~/.bash_completion.d/
Verzeichnis erwarten und die Fehlermeldung nicht sehen möchtenbash: /home/<username>/.bash_completion.d/*: No such file or directory
, fügen Sie einen Dateityp-Test mit hinzu[ -f "$bcfile" ]
.quelle
Die Antwort von Russell E Glaue ist großartig, aber
~/.bash_completion
unvollständig.Das Problem ist, wenn
~/.bash_completion.d/
leer ist und anschließendfor f in ~/.bash_completion.d/*
die folgende Fehlermeldung ausgegeben wird:Die einfachste, tragbare Lösung besteht darin, die Schleife zu überspringen, wenn das Verzeichnis leer ist:
quelle
Eine einfachere Lösung ist die Verwendung der Option nullglob. Dies ist zwar nicht portierbar, aber es gibt auch keine Bash-Vervollständigungen. Portabilität spielt also keine Rolle.
Außerdem sollten Sie beim Sourcing Anführungszeichen um die Variable verwenden. Dies behandelt den Fall, dass die Datei Leerzeichen anderer Sonderzeichen enthält.
quelle
nullglob
), ist für den Leser hilfreich.Mindestens Bash-Vervollständigung 2.8 und höher aktivieren die Option, lokale Bash-Vervollständigungen im Verzeichnis abzulegen
Die Namen der Vervollständigungsdateien oder symbolischen Verknüpfungen müssen mit den jeweiligen Befehlsnamen übereinstimmen. Diese Vervollständigungen werden nur bei Bedarf geladen. In der Datei gespeicherte Vervollständigungen werden
~/.bash_completion
immer geladen.Referenz: Siehe "F. Wo sollte ich meine eigenen lokalen Ergänzungen installieren?" in https://github.com/scop/bash-completion/blob/master/README.md
quelle