Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 wink

A/