Quelqu'un connaîtrait il une méthode simple pour localiser un binaire
dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix)
et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour
diffère selon les Unix, en particulier sous Solaris si la commande
recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire
du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Etant donné que c'est exactement ce que fais which sous UNIX, je ne vois pas trop comment faire autrement. :-)
Donc il faut récupérer le PATH, faire un joli split(':',$path) dessus, et investiguer pour chaque entrée
un truc du genre
use strict; use warnings;
my $file_to_find = 'mon_fichier'; my @files = map { $_ if (exists_file_in_dir($file_to_find) } split ':', $ENV{'PATH'};
sub exists_file_in_dir { # le code de recherche de fichier dans le répertoire qui va bien ici. }
Enfin, quelque chose dans le genre :) -- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire
dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix)
et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour
diffère selon les Unix, en particulier sous Solaris si la commande
recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire
du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Etant donné que c'est exactement ce que fais which sous UNIX, je ne vois
pas trop comment faire autrement. :-)
Donc il faut récupérer le PATH, faire un joli split(':',$path) dessus,
et investiguer pour chaque entrée
un truc du genre
use strict;
use warnings;
my $file_to_find = 'mon_fichier';
my @files = map {
$_ if (exists_file_in_dir($file_to_find)
} split ':', $ENV{'PATH'};
sub exists_file_in_dir {
# le code de recherche de fichier dans le répertoire qui va bien ici.
}
Enfin, quelque chose dans le genre :)
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Etant donné que c'est exactement ce que fais which sous UNIX, je ne vois pas trop comment faire autrement. :-)
Donc il faut récupérer le PATH, faire un joli split(':',$path) dessus, et investiguer pour chaque entrée
un truc du genre
use strict; use warnings;
my $file_to_find = 'mon_fichier'; my @files = map { $_ if (exists_file_in_dir($file_to_find) } split ':', $ENV{'PATH'};
sub exists_file_in_dir { # le code de recherche de fichier dans le répertoire qui va bien ici. }
Enfin, quelque chose dans le genre :) -- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Eric Jacoboni
Leon Nabot writes:
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
Et 'type' ne marche pas non plus ?
-- Éric Jacoboni, né il y a 1427887023 secondes
Leon Nabot <nabotleon@hotmail_N0_SPAMZ.com> writes:
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire
dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix)
et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour
diffère selon les Unix, en particulier sous Solaris si la commande
recherchée est aliasé, le retour est erroné.
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
Et 'type' ne marche pas non plus ?
-- Éric Jacoboni, né il y a 1427887023 secondes
Eric Jacoboni
Stephane Zuckerman writes:
Etant donné que c'est exactement ce que fais which sous UNIX, je ne vois pas trop comment faire autrement. :-)
Non, which ne marche pas pour les alias (ou, plutôt, il ne prend en compte que ceux définis dans .cshrc, donc si ton shell est un Bourne shell tu es marron). D'autre part, type est défini par POSIX alors que which ne l'est pas.
La bonne commande est type :
$ which ll no ll in /opt/local/ada/bin/ /opt/local/bin /opt/local/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ type ll ll is an alias for 'ls -al'
Mais, accessoirement, du point de vue de la sécurité, je ne suis pas sûr que ce soit une très bonne idée de faire confiance à PATH pour rechercher un programme...
-- Éric Jacoboni, né il y a 1427887873 secondes
Stephane Zuckerman <szuckerm@etu.utc.fr> writes:
Etant donné que c'est exactement ce que fais which sous UNIX, je ne vois
pas trop comment faire autrement. :-)
Non, which ne marche pas pour les alias (ou, plutôt, il ne prend en
compte que ceux définis dans .cshrc, donc si ton shell est un Bourne
shell tu es marron). D'autre part, type est défini par POSIX alors que
which ne l'est pas.
La bonne commande est type :
$ which ll
no ll in /opt/local/ada/bin/ /opt/local/bin /opt/local/bin
/bin /sbin /usr/bin /usr/sbin /usr/local/bin
$ type ll
ll is an alias for 'ls -al'
Mais, accessoirement, du point de vue de la sécurité, je ne suis pas
sûr que ce soit une très bonne idée de faire confiance à PATH pour
rechercher un programme...
Etant donné que c'est exactement ce que fais which sous UNIX, je ne vois pas trop comment faire autrement. :-)
Non, which ne marche pas pour les alias (ou, plutôt, il ne prend en compte que ceux définis dans .cshrc, donc si ton shell est un Bourne shell tu es marron). D'autre part, type est défini par POSIX alors que which ne l'est pas.
La bonne commande est type :
$ which ll no ll in /opt/local/ada/bin/ /opt/local/bin /opt/local/bin /bin /sbin /usr/bin /usr/sbin /usr/local/bin $ type ll ll is an alias for 'ls -al'
Mais, accessoirement, du point de vue de la sécurité, je ne suis pas sûr que ce soit une très bonne idée de faire confiance à PATH pour rechercher un programme...
-- Éric Jacoboni, né il y a 1427887873 secondes
Stephane Zuckerman
Non, which ne marche pas pour les alias (ou, plutôt, il ne prend en compte que ceux définis dans .cshrc, donc si ton shell est un Bourne shell tu es marron). D'autre part, type est défini par POSIX alors que which ne l'est pas.
Bien bien, je m'écrase donc mollement. :-)
Mais, accessoirement, du point de vue de la sécurité, je ne suis pas sûr que ce soit une très bonne idée de faire confiance à PATH pour rechercher un programme... Certes. D'un autre côté, tout dépend de la finalité de l'application, et
de son contexte d'utilisation.
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
Non, which ne marche pas pour les alias (ou, plutôt, il ne prend en
compte que ceux définis dans .cshrc, donc si ton shell est un Bourne
shell tu es marron). D'autre part, type est défini par POSIX alors que
which ne l'est pas.
Bien bien, je m'écrase donc mollement. :-)
Mais, accessoirement, du point de vue de la sécurité, je ne suis pas
sûr que ce soit une très bonne idée de faire confiance à PATH pour
rechercher un programme...
Certes. D'un autre côté, tout dépend de la finalité de l'application, et
de son contexte d'utilisation.
--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)
Non, which ne marche pas pour les alias (ou, plutôt, il ne prend en compte que ceux définis dans .cshrc, donc si ton shell est un Bourne shell tu es marron). D'autre part, type est défini par POSIX alors que which ne l'est pas.
Bien bien, je m'écrase donc mollement. :-)
Mais, accessoirement, du point de vue de la sécurité, je ne suis pas sûr que ce soit une très bonne idée de faire confiance à PATH pour rechercher un programme... Certes. D'un autre côté, tout dépend de la finalité de l'application, et
de son contexte d'utilisation.
-- "Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce que je veux !" "The obvious mathematical breakthrough would be development of an easy way to factor large prime numbers." (Bill Gates, The Road Ahead)
David LE BOURGEOIS
Hello,
Salut.
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire du PATH à la recherche de l'exécutable, je ne vois pas de solution. Des idées ?
Quelque chose comme ça ?
$ perl -e 'map {print "$_/$ARGV[0]n" if -f "$_/$ARGV[0]"} split /:/, $ENV{PATH}' ls /bin/ls
Sinon, que donne type ?
Et avec zsh ?
$ bash $ which which /usr/bin/which $ zsh $ which which which: shell built-in command
-- David LE BOURGEOIS
Hello,
Salut.
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire
dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix)
et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour
diffère selon les Unix, en particulier sous Solaris si la commande
recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire
du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Des idées ?
Quelque chose comme ça ?
$ perl -e 'map {print "$_/$ARGV[0]n" if -f "$_/$ARGV[0]"}
split /:/, $ENV{PATH}' ls
/bin/ls
Sinon, que donne type ?
Et avec zsh ?
$ bash
$ which which
/usr/bin/which
$ zsh
$ which which
which: shell built-in command
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire du PATH à la recherche de l'exécutable, je ne vois pas de solution. Des idées ?
Quelque chose comme ça ?
$ perl -e 'map {print "$_/$ARGV[0]n" if -f "$_/$ARGV[0]"} split /:/, $ENV{PATH}' ls /bin/ls
Sinon, que donne type ?
Et avec zsh ?
$ bash $ which which /usr/bin/which $ zsh $ which which which: shell built-in command
-- David LE BOURGEOIS
Laurent Wacrenier
Leon Nabot écrit:
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
vérifier que "command -v" renvoie quelque chose commençant par un "/". C'est le comportement POSIX.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Leon Nabot <nabotleon@hotmail_N0_SPAMZ.com> écrit:
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire
dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix)
et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour
diffère selon les Unix, en particulier sous Solaris si la commande
recherchée est aliasé, le retour est erroné.
vérifier que "command -v" renvoie quelque chose commençant par un "/".
C'est le comportement POSIX.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire
du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Quelqu'un connaîtrait il une méthode simple pour localiser un binaire dans le PATH, bref faire l'équivalent d'un "which" (Je suis sous Unix) et ceci en utilisant les fonctions/librairies standards d'un Perl 5.005.
J'ai essayé en récupérant la sortie de la commande Unix mais le retour diffère selon les Unix, en particulier sous Solaris si la commande recherchée est aliasé, le retour est erroné.
vérifier que "command -v" renvoie quelque chose commençant par un "/". C'est le comportement POSIX.
A l'heure actuelle, à part écrire une routine balayant chaque répertoire du PATH à la recherche de l'exécutable, je ne vois pas de solution.
Effectivement comme beaucoup l'on suggéré, utiliser "type" arrange bien les choses, j'aurais du y penser (Je m'excuse, c'est la fin de la semaine, j'avais pas encore avalé mes deux litres de café matinaux et manifestement la plupart de mes neurones sont partis en week-end sans moi ;-) )
Sinon, j'ai aussi la ligne de commande suivante dérivée des solutions proposés et qui arrive au même résultat:
foreach (split(/:/,$ENV{PATH})) { print "Found $_/<cmd>n" if -x "$_/<cmd>" }
Me reste plus qu'à trouver une pièce de monnaie pour tirer au sort quelle solution j'utilise :-)
Merci encore de votre aide.
Cdlt
Léo
D'abord, merci à tous pour vos réponses.
Effectivement comme beaucoup l'on suggéré, utiliser "type" arrange bien
les choses, j'aurais du y penser (Je m'excuse, c'est la fin de la semaine,
j'avais pas encore avalé mes deux litres de café matinaux et
manifestement la plupart de mes neurones sont partis en week-end sans moi ;-) )
Sinon, j'ai aussi la ligne de commande suivante dérivée des solutions
proposés et qui arrive au même résultat:
foreach (split(/:/,$ENV{PATH})) { print "Found $_/<cmd>n" if -x "$_/<cmd>" }
Me reste plus qu'à trouver une pièce de monnaie pour tirer au sort
quelle solution j'utilise :-)
Effectivement comme beaucoup l'on suggéré, utiliser "type" arrange bien les choses, j'aurais du y penser (Je m'excuse, c'est la fin de la semaine, j'avais pas encore avalé mes deux litres de café matinaux et manifestement la plupart de mes neurones sont partis en week-end sans moi ;-) )
Sinon, j'ai aussi la ligne de commande suivante dérivée des solutions proposés et qui arrive au même résultat:
foreach (split(/:/,$ENV{PATH})) { print "Found $_/<cmd>n" if -x "$_/<cmd>" }
Me reste plus qu'à trouver une pièce de monnaie pour tirer au sort quelle solution j'utilise :-)