#1 Le 02/08/2006, à 16:16
- Astral
[bash] Récuperer le répertoire dans lequel est situé le script ?
Bonjour,
Je cherche exemple de script qui me donne le nom de base du repertoire dans lequel il est situé, mais qui fonctionne encore lorsque l'on a fait un lien symbolique et qu'on l'appelle par son lien.
Exemple, j'ai un script /home/scripts/toto.sh.
Si je fais un lien symbolique : /usr/bin/tutu.sh -> /home/scripts/toto.sh, alors tous les scripts à base de dirname s'ecroulent, car dirname n'a pas d'option "suivre les liens" (et donc me renvoit le chemin de base du lien).
Alternativement, je peux me contenter d'un script qui renvoit un chemin complet en parcourant si besoin est le (ou meme les) liens.
Le seul truc que j'ai trouvé est d'utiliser file $0 qui me dit si le fichier est un lien et si oui me donne le chemin complet, mais je n'arrive pas a exploiter le resultat dans un awk + sed..
Si quelqu'un pouvait me depanner...
Thanks,
A/
#2 Le 03/08/2006, à 13:06
- Astral
Re : [bash] Récuperer le répertoire dans lequel est situé le script ?
Bonjour,
Finallement j'ai trouvé :
#!/bin/bash
export ROOT=`python -c "import os; print os.path.normpath(os.path.dirname(os.path.abspath(os.path.realpath('$0'))))" 2> /dev/null`
echo $ROOT
Le seul pre-requis est d'avoir un python sur la machine.
Merci a ceux qui ce sont penchés sur ce probleme.
A/
#3 Le 03/08/2006, à 18:59
- kaworu
Re : [bash] Récuperer le répertoire dans lequel est situé le script ?
Salut !
perso je trouve bien crade de passer par python, je continue a chercher..
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#4 Le 04/08/2006, à 13:23
- Luc Hermitte
Re : [bash] Récuperer le répertoire dans lequel est situé le script ?
Et en allant chercher dans /proc/{num-du-process} ?
man proc pour voir les diverses infos que tu peux décoder.
#5 Le 04/08/2006, à 14:51
- kaworu
Re : [bash] Récuperer le répertoire dans lequel est situé le script ?
Salut !
#!/bin/bash
F=$(basename $0)
while [ "$(file $F | grep "symbolic link")" != "" ]; do
#echo -n "$F -> "
F="$(ls -la $F | cut -d ">" -f2 | cut -d " " -f2)"
#echo $F
cd "$(dirname $F)"
F="$(basename $F)"
done
echo "Final file : $PWD/$F"
Enlève les commentaires des echo pour matter les liens.
Comme c'est une boucle, on va chercher le fichier même si on l'a executé par un lien de lien de lien de...
J'ai fait avec 2 pipe pour les cut, on pourrait avec 1 seul en prenant " " pour -d mais ça veut dire que tu peux pas avoir d'espace dans les noms de liens symboliques.. alors autant mettre ">" pour le premier pipe, parce que c'est vraiment sûr, et virer après l'espace en trop devant avec un petit cut.
Enjoy ?
Dernière modification par kaworu (Le 04/08/2006, à 14:54)
"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."
Hors ligne
#6 Le 07/08/2006, à 13:58
- Astral
Re : [bash] Récuperer le répertoire dans lequel est situé le script ?
Hi,
Effectivement, ca marche bien, merci.. J'avais commencé par avoir cette idée mais je n'ai jamais reussi a decoder la ligne du file a cose de l'anti-cote je pense.. Merci, comme ca j'ai appris un truc
A/