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 :

Script bash pour parcourir la variable Path


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut Script bash pour parcourir la variable Path
    Bonjour,

    Je désire réaliser un scipt en bash pour parcourir la variable $Path et afficher les les repertoires qui sont les memes que nom que l'usager aura entré comme parametre.

    J'ai commencé mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #!/bin/bash
     
    echo $PATH
    Mai je suis bloqué au niveau de la boucle for car les repertoires dans la $Path sont séparés par des :

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for p in $(echo $PATH | tr ':' '\n'); do
        echo "->" $p;
    done

  3. #3
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Puisque les chemins peuvent contenir des espaces, mieux vaut ne découper les tokens que selon les ":".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IFS=":"; for i in $PATH; do echo $i; done

  4. #4
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Sinon, en mettant des guillemets autour du $() ça marche aussi.
    Mais utiliser la variable IFS est bien plus propre.

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par Celelibi Voir le message
    Mais utiliser la variable IFS est bien plus propre.
    Tu trouves ? Y a tellement d'effets de bord possible en utilisant cette IFS, je ferais juste un bon vieux | sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for p in $(echo $PATH | sed 's/:/ /g'); do
        echo "->" $p
    done

  6. #6
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Quelle différence entre ton sed et le tr donné avant ? Mais tu as un problème s'il y a des espaces dans le PATH... Si tu veux utiliser une boucle for, tu dois modifier l'IFS pour gérer tous les cas.

    Pour éviter de toucher à l'IFS, on peut utiliser un while + read.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "${PATH}:" | while read -d':' line; do echo "$line"; done

  7. #7
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Aucune, c'est juste que j'aime bien sed J'ai pensé au coup des espaces mais faut reconnaître que c'est rare sous Unix d'avoir des espaces dans un nom de répertoire figurant dans le path.

  8. #8
    Membre émérite
    Homme Profil pro
    Recherche du travail
    Inscrit en
    Août 2004
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Recherche du travail

    Informations forums :
    Inscription : Août 2004
    Messages : 561
    Par défaut
    tr gère mieux les retour à la ligne.

  9. #9
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    Bonjour,

    J'ai une petite chose a affiner :

    Soit le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    #!/bin/bash
     
     
    for p in $(echo $PATH | tr ':' '\n');
      do
     
        find $p -amin -$2  
     
     
      done
    Je désire parcourir la variable path pour afficher les programmes executables
    1 - qui ont été accédés il y a x minutes
    2 - dont l'addresse contient le mot entré en parametre

    Par exemple

    l'usager entre
    ./nomFonction bin 2
    doit afficher par exemple


    r/ordinateur/bin/
    r/mail/bin/programme

    .....
    merci d'avance

  10. #10
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    man find
    Regarde l'option -wholename, ça doit être ce que tu cherches.

  11. #11
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    En fait mon probleme

    - c'est de comparer les repertoires extraits du path avec le mot que l'usager a donné en paramêtre

    - afficher que les programmes executables

  12. #12
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    man find

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    Les fichiers qui sont dans le PATH sont forcément des exécutables.

    Pour les espace de PATH tu peux aussi utiliser IFS c'est plus élégant!

    C'est pour quel cours cet exercice?

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    tu peux ajouter cette option (-perm /111) à ton find pour ne sortir que des fichiers exécutables.

  15. #15
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    oui merci

    quel commande peut me permettre de comparer les repertoire pour voir s ils contienne le mot désiré

    ex :
    etc/bin/mail/programme contient t-il bin (entrez par l usager)

  16. #16
    Membre émérite
    Avatar de Celelibi
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 087
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 087
    Par défaut
    Ta question n'a rien à voir avec le sujet initial, tu es donc prié d'ouvrir un nouveau topic.
    De plus tu es aussi prié de lire les man. Genre man bash commande read, et man grep.

  17. #17
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2008
    Messages : 4
    Par défaut
    Peux-tu poster la solution...

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

Discussions similaires

  1. Script Bash pour exécuter requete SQL sur une base Oracle
    Par Flipmode dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 28/11/2008, 17h18
  2. script c pour mettre une variable ds un fichier
    Par majong dans le forum Linux
    Réponses: 3
    Dernier message: 13/03/2008, 15h57
  3. Script bash pour grub
    Par mplcd dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 04/12/2007, 12h44
  4. Réponses: 1
    Dernier message: 09/02/2007, 22h51
  5. Script shell pour persister les variables exportées
    Par Giovanny Temgoua dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 03/10/2006, 09h07

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