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
$PATHest 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).
~/binou ~/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: binpour les exécutables, libpour les bibliothèques, docpour 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/binet /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 binsous - 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 $PATHconsiste à créer des liens symboliques dans un répertoire du chemin tel que /usr/local/bin. L' stowutilitaire (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 $PATHincluez /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.