J'ai un accès utilisateur (non root) sur une machine Linux (Suse) sur laquelle j'ai développé des scripts bash et les règles d'auto-complétion correspondantes.
Étant donné que les scripts n'appartiennent qu'à mon utilisateur et que j'ai donc besoin des règles complètes uniquement "actives" pour moi (en partie du fait que je n'ai pas d'accès en écriture root), placer mon script bash_completion dans un /etc/bash_completion.d/
dossier n'est pas une option.
Pour le moment, j'ai nommé mon fichier .bash_completion.myscript
et le source directement à partir de mon nom .bashrc
, mais je me demande simplement s'il existe un autre moyen "standard" d'obtenir ces résultats, déjà pris en compte dans la mise en œuvre de bash.
Par exemple, créer un dossier /home/myuser/.bash_completion.d/
?
la source
.bash_completion
s'agit d'un fichier et non d'un répertoire. Étant donné quebash_completion.d
c’est un répertoire, j’ai supposé que je pouvais seulementscp
réinstaller mon répertoire localbash_completion.d
et le renommer sur le serveur distant, mais lors de la connexion suivante, il m’a indiqué que ce devait être un fichier.Voici comment un utilisateur local peut avoir un
~/.bash_completion.d/
répertoire de travail .modifier le fichier:,
nano ~/.bash_completion
ajoutez ce qui suit:faire un répertoire:
mkdir ~/.bash_completion.d
modifier le fichier:,
~/.bash_completion.d/myscript
ajoutez ce qui suit:source .bash_completion:
. ~/.bash_completion
Mise à jour
Si vous prévoyez d'avoir un
~/.bash_completion.d/
répertoire vide et que vous souhaitez éviter de voir le message d'erreurbash: /home/<username>/.bash_completion.d/*: No such file or directory
, ajoutez un test de type de fichier avec[ -f "$bcfile" ]
.la source
La réponse de Russell E. Glaue est excellente mais
~/.bash_completion
incomplète.Le problème est quand
~/.bash_completion.d/
est vide etfor f in ~/.bash_completion.d/*
imprime ensuite le message d'erreur suivant:La solution la plus simple et portable consiste à ignorer la boucle si le répertoire est vide:
la source
Une solution plus simple consiste à utiliser l'option nullglob. Bien que ce ne soit pas portable, ni les achèvements de bash. Donc, la portabilité n'a pas d'importance.
En outre, vous souhaiterez utiliser des guillemets autour de la variable lors de l’approvisionnement. Ceci gère le cas où le fichier contient des espaces avec d'autres caractères spéciaux.
la source
nullglob
) est utile pour le lecteur.Au moins bash-completion 2.8 et ultérieur permettent à l'option de placer les complétions Bash locales dans le répertoire
Les noms de fichier d'achèvement ou les noms de liens symboliques doivent correspondre aux noms de commande respectifs. Ces finitions ne sont chargées que sur demande. Les finitions stockées dans le fichier
~/.bash_completion
sont toujours chargées.Référence: voir "Q. Où devrais-je installer mes propres finitions locales?" dans https://github.com/scop/bash-completion/blob/master/README.md
la source