source de tous les fichiers dans un répertoire à partir .bash_profile
J'ai besoin pour permettre à plusieurs applications à ajouter à un système de variable ($PYTHONPATH dans ce cas). Je pense à la désignation d'un répertoire où chaque application peut ajouter un module (par exemple .bash_profile_modulename). Essayé quelque chose comme cela dans ~/.bash_profile:
find /home/mike/ -name ".bash_profile_*" | while read FILE; do
source "$FILE"
done;
mais il ne fonctionne pas.
- Un test rapide de script fonctionne pour moi. Pouvez-vous être plus précis quant à ce que vos fichiers contiennent et ce qui "ne fonctionne pas" signifie?
- Les fichiers apparence: à l'exportation PYTHONPATH=/testpath/:$PYTHONPATH Problème est qu'il ne pas ajouter /testpath/ pour le PYTHONPATH.
- Juste pour expliquer pourquoi le script d'origine ne fonctionne pas: les fichiers sont produites dans une boucle while dans un pipeline; bash objets internes utilisés dans les conduites d'exécuter en sous-coquille, donc tout ce que définis par la source des fichiers disparaît lorsque le shell interne est exécuté sorties. La solution (comme dans les réponses ci-dessous) est d'éliminer le pipeline.
- Très simmilar à cette question: stackoverflow.com/q/20796200/1695680
Vous devez vous connecter pour publier un commentaire.
Ne serait pas
être suffisant?
Modifier: couche Supplémentaire de
ls ~/.bash_*
simplifié de direct bash expansion./etc
dossier, qui contient bash achèvements de gestion de paquetsunset f
pour se débarrasser de cef
variable.Je suis d'accord avec Dennis ci-dessus; votre solution devrait fonctionner (bien que le point-virgule après le "fait" ne devrait pas être nécessaire). Cependant, vous pouvez également utiliser une boucle for
La substitution de commande de la ls n'est pas nécessaire, comme dans de Dirk réponse. C'est le mécanisme utilisé, par exemple, dans
/etc/bash_completion
à la source d'autres scripts bash completion dans/etc/bash_completion.d
. "$f"
. Autre que cela, la meilleure réponse./path/to/dir/*
).Oneliner (uniquement pour bash/zsh):
aus man bash:
ein source de config/*
Le premier argument sera de source et tous les autres fichiers dans le répertoire config/sera arguments pour le script, ça sources.
Cette solution est la plus buchbar j'ai jamais trouvé, jusqu'à présent:
Je l'ai testé et je l'utilise.
Juste modifier les . après trouver pour pointer vers votre dossier avec vos scripts et il va fonctionner.
Vous pouvez utiliser cette fonction pour la source de tous les fichiers (le cas échéant) dans un répertoire:
Le fichier supplémentaire vérifie poignée le coin des cas où le modèle ne correspond pas en raison du répertoire vide (ce qui fait que la variable de boucle d'étendre le modèle de la chaîne elle-même).
ok, donc ce que j'ai fait;
execute une source dans le shell courant et maintian toutes les variables...
Je pense que vous devriez juste être capable de faire
source ~/.bash_profile_*
source
ne prend qu'un seul argument (et ignore superflu arguments). Je suis sûr que ce genre de suce.