Il semble que lors de l'ajout d'un répertoire dans $ PATH, ses sous-répertoires ne soient pas ajoutés de manière récursive. Alors je peux faire ça? Ou y a-t-il une raison pour laquelle cela n'est pas pris en charge?
Il semble que lors de l'ajout d'un répertoire dans $ PATH, ses sous-répertoires ne soient pas ajoutés de manière récursive. Alors je peux faire ça? Ou y a-t-il une raison pour laquelle cela n'est pas pris en charge?
Réponses:
Ajoutez-les récursivement en utilisant find like so:
PATH=$PATH$( find $HOME/scripts/ -type d -printf ":%p" )
AVERTISSEMENT: comme indiqué dans les commentaires à la question, cela n'est pas encourageant car cela pose un risque pour la sécurité car rien ne garantit que les fichiers exécutables des répertoires ajoutés ne sont pas malveillants.
C'est probablement une meilleure solution de suivre la réponse de Gilles et d'utiliser stow
$PATH
est dangereux, mais l'ajout de sous-répertoires n'est pas pire. Mais cela est généralement inutile et peut-être inefficace (et peut même vous amener parfois à des limites de taille d'environnement).
~/bin
ou ~/scripts
), afin que leur sécurité soit la même.
~/scripts
. Moi non plus, personne ne le devrait
La structure de répertoires unix habituelle contient des fichiers d’application classés par type: bin
pour les exécutables, lib
pour les bibliothèques, doc
pour la documentation, etc. C'est quand ils sont installés dans des répertoires séparés; souvent les applications sont regroupées dans quelques répertoires ( d' où de nombreux systèmes ont seulement trois répertoires $PATH
: /usr/local/bin
, /usr/bin
et /bin
). Il est rare d’avoir à la fois des fichiers exécutables et des sous-répertoires dans un répertoire. Il n’est donc pas nécessaire d’inclure les sous-répertoires d’un répertoire dans $PATH
.
Il peut parfois être utile d’inclure tous les bin
sous - répertoires des sous-répertoires d’un répertoire donné dans $PATH
:
for d in /opt/*/bin; do PATH="$PATH:$d"; done
Cependant, cela est rarement fait. La méthode habituelle lorsque des exécutables situés dans des répertoires non standard doivent être insérés $PATH
consiste à créer des liens symboliques dans un répertoire du chemin tel que /usr/local/bin
. L' stow
utilitaire (ou xstow
) peut être utile à cet égard.
Une des raisons pour lesquelles cela n'est pas pris en charge est que les répertoires bin / (et similaires) utilisent des liens symboliques pour pointer vers les répertoires spécifiques dans lesquels les exécutables réels des programmes sont installés.
Donc, si vous $PATH
incluez /usr/local/bin
(ce qu’il fait probablement), ce dossier est plein de liens symboliques (comme ruby
) qui pointent vers le répertoire spécifique dans lequel se trouve le code d’exécution de ruby (comme ../Cellar/ruby/2.1.3/bin/ruby
).
C'est pourquoi vous n'avez pas à spécifier le dossier de chaque exécutable dans votre $PATH
; les liens symboliques habituellement trouvés dans les répertoires bin / type gèrent cela pour vous.
Dans zsh , $ PATH peut être ajouté en tant que tableau. Vous pouvez utiliser le shell globbing pour ajouter plusieurs sous-répertoires au tableau $ PATH.
Exemple:
Dans .zshrc
:
typeset -U PATH path
BINPATH="$HOME/bin"
path+=("$BINPATH" ${BINPATH}/*/)
export PATH
Cela ajoutera tous les sous-répertoires de $ BINPATH au tableau $ PATH.