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

Linux Discussion :

Chemin absolu ou cd


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Par défaut Chemin absolu ou cd
    Bonjour,

    J'ai une petite réflexion dans mon boulot , on a des script KSH où l'on fait appelle à d'aures script, mais la où je bosse il veulent faire un cd pour se retrouver dans le répertoire courant du script afin de le lancer:
    Environnement Prod unix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/ksh
     
    cd /usr/bin/dev/; /monscript.ksh
    Moi je pense qu'il vaut mieux lancer une seul instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/ksh
     
    /usr/bin/dev/monscript.ksh
    Pour vous lequel est plus optimisé ou plus efficace ?

    Merci pour vos lumières

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Si des scripts doivent être enchaînés la méthode est carrément mauvaise.
    il faut alors utiliser un ordonnanceur ou faire faire des levées de FLAGS aux scripts qui les attendent...

    quand à l'utilisation d'un

    cd truc ; machin.ksh c'est aberrant...

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par frp31 Voir le message
    quand à l'utilisation d'un

    cd truc ; machin.ksh c'est aberrant...
    Je suis d'accord aussi, principalement parce que le controle n'est quasiment jamais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ## On va executer machin
    cd toto/titi
    ./machin.ksh
     
    ## On revient
    cd ../..
     
    ## On fait autre chose
    ./autre_chose
    Execution 1, depuis /home/moi, avec les repertoires toto et titi qui existent et qui ont les bons droits : pas de soucis.
    Execution 2, depuis /home/moi, sans le repertoire toto : le cd ../../ va faire tres mal.

    et le fait de tester que tu es dans le bon repertoire est beaucoup plus lourd que d'appeler le script avec le chemin absolu.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2006
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2006
    Messages : 100
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Je suis d'accord aussi, principalement parce que le controle n'est quasiment jamais fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ## On va executer machin
    cd toto/titi
    ./machin.ksh
     
    ## On revient
    cd ../..
     
    ## On fait autre chose
    ./autre_chose
    Execution 1, depuis /home/moi, avec les repertoires toto et titi qui existent et qui ont les bons droits : pas de soucis.
    Execution 2, depuis /home/moi, sans le repertoire toto : le cd ../../ va faire tres mal.

    et le fait de tester que tu es dans le bon repertoire est beaucoup plus lourd que d'appeler le script avec le chemin absolu.
    JE suis daccord avec vous pour le chemin absolue sans utiliser le CD est bien meilleur , mais n'ayant pas la science infuse je cherchais des arguments ...merci beaucoup

  5. #5
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par jojo971 Voir le message
    je cherchais des arguments ...merci beaucoup
    La programmation defensive, il n'y a que ca de vrai : tu fais quelque chose, tu verifies que ca a fonctionne avant de faire la chose suivante.

    Donc pour tes collegues :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    cd toto
    res=$(echo $?)
     
    if [ $res -eq 1 ]
    then
       echo "le repertoire n'existe pas "
       ## bon bah euh, on quitte
       exit -1
    fi
     
    ./script.sh
    res=$(echo $?)
     
    if [ $res -eq 1 ]
    then
       echo "le script a echoue "
       ## bon bah euh, on quitte
       exit -1
    fi
    Pour toi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /home/user/toto/script.sh
    res=$(echo $?)
     
    if [ $res -eq 1 ]
    then
       echo "le script a echoue "
       ## bon bah euh, on quitte
       exit -1
    fi
    Tu gagnes du temps, tu passes par la case depart, tu gagnes un cafe, et tu es content.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    La programmation defensive, il n'y a que ca de vrai : tu fais quelque chose, tu verifies que ca a fonctionne avant de faire la chose suivante.
    Tout-à-fait d'accord!
    (On est même en train de développer un framework pour ça)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cd toto
    res=$(echo $?)
    Pourquoi passes-tu par "echo"??? Y a-t-il une différence avec ceci:

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Citation Envoyé par jojo971 Voir le message
    Bonjour,

    J'ai une petite réflexion dans mon boulot , on a des script KSH où l'on fait appelle à d'aures script, mais la où je bosse il veulent faire un cd pour se retrouver dans le répertoire courant du script afin de le lancer:
    Environnement Prod unix

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/ksh
     
    cd /usr/bin/dev/; /monscript.ksh
    Moi je pense qu'il vaut mieux lancer une seul instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/ksh
     
    /usr/bin/dev/monscript.ksh
    Pour vous lequel est plus optimisé ou plus efficace ?

    Merci pour vos lumières
    Je suppose qu'il y a une coquille et qu'il manque un "." devant /monscript.ksh

    La question de savoir si le script est trouvé est pertinente et on peut la régler par un test (que ce soit en absolu ou en relatif):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/bin/ksh
    typeset script=/usr/bin/dev/monscript.ksh
    if [[ ! -x "${script}" ]] ; then
        print "impossible d'exécuter ${script}"
        exit 1
    fi
    typeset -i res
    ${script} ; res=$?
    if [[ $res -eq 0 ]] ; then
        : # ok
    else
        print "une erreur s'est produite pendant l'exécution de ${script}"
        # ici, on peut continuer ou arrêter...
        exit $res
    fi
    Évidemment, ça améliore plus la robustesse que l'efficacité ou la lisibilité!


    Amha, les outils doivent être organisés pour être trouvables dans le PATH.

    Éventuellement, pour un outil inhabituel, il peut être désigné par son répertoire absolu (en faisant attention à la gestion des versions (ln vxxx -> current)).


    Mais, surtout, il ne faut pas oublier qu'il y a une grande différence entre "cd" ou pas "cd": c'est que le répertoire courant n'est pas le même! (tautologiquement parlant!)

    Si le script appelé traite des fichiers non globaux (dont le nom ne commence pas par "/"), il ne trouvera pas les mêmes suivant qu'on fait ou non un "cd"!

    De même, si on passe des fichiers en argument au script, même problème!
    ${script} *.txt est très différent de cd some/where; ${script} *.txt.

    Pour moi, si on choisit de faire un "cd", c'est pour se positionner à l'endroit où on veut lire ou modifier des fichiers.

    Un script peut d'ailleurs nécessiter d'être lancé depuis un répertoire donné et s'attendre à y trouver une arborescence donnée (fichiers de config, fichiers de données, outils locaux, etc.).

    En revanche, s'il doit lancer d'autres outils, le script doit pouvoir soit les trouver dans le PATH, soit pouvoir les désigner globalement, soit les trouver dans l'arborescence courante (si elle contient des outils locaux), mais ne doit en aucun cas reposer sur le fait qu'il est lancé depuis le répertoire où il est installé.

    )jack(

  8. #8
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Amha, les outils doivent être organisés pour être trouvables dans le PATH.
    Pour que cette solution fonctionne, tu supposes que tous les chemins dont tu as besoin sont dans le PATH de chaque utilisateur sur chaque machine cible, ce qui n'est pas forcement le cas.
    Et tu supposes egalement que ton script ne sera jamais mis dans une crontab par un utilisateur, ce qui n'est encore une fois pas forcement le cas.

    Voila pourquoi j'utilise toujours des chemins absolus, meme si c'est plus contraignant ou plus long a ecrire.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

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

Discussions similaires

  1. [PDE] chemin absolu
    Par khokho dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 23/08/2005, 11h41
  2. [Info]chemin absolu du projet courant
    Par slyos72 dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 30/05/2005, 10h06
  3. [langage] chemin absolu d un fichier
    Par nono1782 dans le forum Langage
    Réponses: 4
    Dernier message: 20/07/2004, 14h02
  4. [langage] Création de dossier en chemin absolu
    Par Jibees dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2003, 10h57

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