IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Récupérer le répertoire du script en cours d'exécution


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Par défaut Récupérer le répertoire du script en cours d'exécution
    Bonjour,

    Je suis en train de faire un script qui doit savoir où il est, car il va travailler sur des fichiers dont il connait la position par rapport à lui même.

    J'ai trouvé de nombreuses solutions sur le web, mais aucune ne m'a satisfaite.



    Donc si vous avez d'autres solutions, merci d'avance.

  2. #2
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Passé il y a quelques jours :

    http://www.developpez.net/forums/d82...ipt-execution/



    edit: et le lien direct vers la solution :
    http://www.developpez.net/forums/d79...r/#post4586928

    Et pour bien te former voir les Cours et tutoriels pour bien apprendre Scilab : http://scilab.developpez.com/cours/

  3. #3
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Par défaut
    Merci pour cette réponse rapide !

    Mais cela ne me convient pas. readlink a besoin de deviner de quel fichier on parle. Si le script est lancé depuis un autre répertoire avec un chemin relatif (rep/script.sh), le fichier n'est pas trouvé. La solution qui vient à l'esprit est alors readlink $0. Mais comme précisé dans ma question, $0 n'est pas toujours utilisable.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par rt15 Voir le message
    Bonjour,

    Je suis en train de faire un script qui doit savoir où il est, car il va travailler sur des fichiers dont il connait la position par rapport à lui même.

    J'ai trouvé de nombreuses solutions sur le web, mais aucune ne m'a satisfaite.



    Donc si vous avez d'autres solutions, merci d'avance.
    ne convient pas ?

    (ce ne sera évidemment pas un path canonisé… )

  5. #5
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Par défaut
    Bien tenté, mais non plus.

    Classiquement ça marche très bien, mais le souci est qu'on appelle nos scripts de manière à ce qu'ils s'exécutent dans le shell courant, comme les scripts "configure" :

    Et dans ces cas là, $0, c'est "bash", donc inutilisable...

    [ edit ]
    Je dois aussi supporter le cas suivant :
    Ce cas n'est pas géré sur le ./configure dans lequel j'ai jeté un oeil :
    bash: error: cannot find sources (src/version.c) in . or ..

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par rt15 Voir le message
    Bien tenté, mais non plus.

    Classiquement ça marche très bien, mais le souci est qu'on appelle nos scripts de manière à ce qu'ils s'exécutent dans le shell courant, comme les scripts "configure" :

    Et dans ces cas là, $0, c'est "bash", donc inutilisable...
    oui c'est le seul cas qui ne fonctionne pas tel quel…
    mais on peut le détecter car dans le fichier sourcé le $BASH_ARGV contient le nom du programme alors qu'il est vide dans les autres cas…

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if [ "$BASH_ARGV" == "" ]
    then
    	path=$PWD/$0
    else
    	path=$PWD/$BASH_ARGV
    fi

  7. #7
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Par défaut
    Merci encore, mais ce n'est pas encore ok... Mais y a de l'idée !

    Le problème étant que BASH_ARGV n'est pas inclus dans les vielles versions de bash (2.0.3, 2.0.5...). Y aurait pas une autre variable qui donne plus ou moins la même chose ?

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par rt15 Voir le message
    Merci encore, mais ce n'est pas encore ok... Mais y a de l'idée !

    Le problème étant que BASH_ARGV n'est pas inclus dans les vielles versions de bash (2.0.3, 2.0.5...). Y aurait pas une autre variable qui donne plus ou moins la même chose ?
    accédez à un de ces anciens bash et mettez une ligne
    au début d'un script … et comparez le résultat entre les exécutions "sourcée" et "normale" …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer le chemin du module en cours d'exécution
    Par mdriesbach dans le forum Général Python
    Réponses: 6
    Dernier message: 09/07/2010, 09h50
  2. Récupérer le répertoire du script
    Par horec dans le forum Linux
    Réponses: 1
    Dernier message: 02/11/2009, 15h59
  3. Récupérer chemin absolu du script en cours d'exécution
    Par greatmaster1971 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 15/09/2008, 09h07
  4. Arrêter un script en cours d'exécution
    Par trucentete dans le forum Administration système
    Réponses: 2
    Dernier message: 04/09/2008, 19h40
  5. Réponses: 2
    Dernier message: 29/01/2004, 11h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo