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

Langage Perl Discussion :

Récupérer le chemin vers une commande


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Par défaut Récupérer le chemin vers une commande
    Bonjour,
    j'aimerais récupérer le chemin d'accès vers une commande dans une chaîne.
    Exemple :
    La commande 'ls' est dans /usr/bin/ls
    j'aimerais que $string vaille "/usr/bin/"

    Je suppose que je dois faire appel aux fonctions de File::Basename mais je n'arrive pas à me dépatouiller.

    Merci à ceux qui pourront m'aider.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    lami20j@debian:~$ cat chemin_commande.pl
    #!/usr/bin/perl
    use strict;use warnings;
    use File::Basename;
     
    my $commande="/usr/bin/ls";
    my $string=dirname($commande) . '/';
     
    print "$string\n";
     
    __END__
    lami20j@debian:~$ perl chemin_commande.pl
    /usr/bin/
    lami20j@debian:~$

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Par défaut
    Merci, mais si justement je ne sais pas que c'est dans /usr/bin/. Est-ce que je peux faire un truc du genre "which ls" ?

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Re,
    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
     
    lami20j@debian:~$ cat chemin.pl
    #!/usr/bin/perl
    use strict;use warnings;
    use File::Basename;
     
    print "Tapez une commande : ";
    chomp (my $commande = <STDIN>);
    my $cmd=qx/whereis -b $commande/;
    $cmd=~/.*:\s+(.*?)(\s|$)/;
    my $string=dirname($1) . '/';
     
    print "$string\n";
     
    __END__
    Exemples

    lami20j@debian:~$ perl chemin.pl
    Tapez une commande : perl
    /usr/bin/
    lami20j@debian:~$ perl chemin.pl
    Tapez une commande : bash
    /bin/
    lami20j@debian:~$ perl chemin.pl
    Tapez une commande : reboot
    /sbin/
    lami20j@debian:~$ perl chemin.pl
    Tapez une commande : ls
    /bin/
    lami20j@debian:~$

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Quitte à utiliser une commande externe, autant utiliser directement which qui au moins donne uniquement la réponse souhaité par le posteur et ne requiert pas de post-traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #! /usr/bin/perl
    use strict; use warnings;
    use v5.10;
    use File::Basename;
     
    $|++;
    print "Tapez une commande : ";
    chomp (my $commande = <STDIN>);
    chomp(my $cmd=qx/which $commande/);
     
    say dirname($1), '/';
     
    __END__
    --
    Jedaï

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    Par défaut
    OK, c'est parfait.
    Merci à tous les deux.

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Par défaut
    Salut,

    Citation Envoyé par Jedai Voir le message
    Quitte à utiliser une commande externe, autant utiliser directement which qui au moins donne uniquement la réponse souhaité par le posteur et ne requiert pas de post-traitement :
    Je ne savais pas que which est une commande interne de Perl.
    En fait elle ne l'est pas, donc tu utilises aussi une commande externe, n'est-ce pas?
    La commande which cherche les fichiers exécutables dans la variable PATH, et c'est ça que j'ai pensé la 1ère fois.
    En revanche il y a des exécutables qui se trouvent dans des répertoires qui ne font pas partie de PATH et requiert un post-traitement.

    C'est pour ça que j'ai changé d'avis ;-)

    P.S.
    Voir man which et man whereis
    Bienvenu dans le monde GNU/Linux ;-)

Discussions similaires

  1. Récupérer la sortie d'une commande
    Par oceeco dans le forum wxPython
    Réponses: 3
    Dernier message: 11/02/2007, 20h37
  2. [MFC] Récupérer le chemin d'une image
    Par Rafoo dans le forum MFC
    Réponses: 2
    Dernier message: 08/06/2006, 14h52
  3. Récupérer le résultat d'une commande shell
    Par espadon1 dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 10h01
  4. Réponses: 2
    Dernier message: 02/01/2006, 10h39
  5. Comment récupérer le chemin d'une table liée
    Par ptitepunk dans le forum Access
    Réponses: 2
    Dernier message: 15/09/2005, 10h47

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