Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Action sur présence ou non d'un binaire dans le PATH

15 réponses
Avatar
Kevin Denis
Bonjour,

je dois lancer un script sur plusieurs machines.
Selon les machines, j'ai a disposition ou pas certains binaires.
J'utilise le PATH pour vérifier la présence du binaire.
Cela donne:
if [ `which programme` ]
then
echo programme est là
(...)
else
echo programme n'est pas là
(...)
fi

Pour éviter des sorties sur l'écran me montrant la
localisation de 'programme' ou des messages d'erreur comme quoi 'programme'
n'est nulle part, j'ai du modifier le test par:
if [ `which programme 2>\&1 > /dev/null` ]

Pourquoi dois-je mettre un \ devant le & ? Normalement,
tout ce qui est entre `` doit être exécuté tel quel?

Ca me parait lourd comme méthode, existe t'il une manière de réaliser
mon test?

--
Kevin

5 réponses

1 2
Avatar
Olivier Miakinen
Bonjour,

Le 22/06/2008 01:03, Cyrille Lefevre a écrit :

s/deprecaded/déconseillée/ :)



C'est ainsi que je l'entends en général. L'endroit où je rencontre
ce terme le plus souvent, c'est dans la norme HTML : les balises
dépréciées sont déconseillées d'une part, et d'autre part elles
risquent de disparaître complêtement dans une version future.

Et la raison, c'est la séparation entre le contenu (qui reste dans
HTML) et la présentation (que l'on fait en CSS).

pour les raisons que j'ai avancée :

par exemple :

echo `echo `echo `echo coucou```

donne :

echo $(echo $(echo $(echo coucou)))

quelle notation te semble la plus lisible ?



La seconde, bien sûr. Mais pour ma part je n'ai jamais eu le besoin
d'imbriquer cette syntaxe. Je m'en sers essentiellement dans les
constructions du genre :
wc `find ...`
ou :
fgrep ... `find ...`
(et oui, je sais, fgrep n'est pas standard non plus)

Des collègues à moi utilisent plutôt xargs.


Cordialement,
--
Olivier Miakinen
Avatar
Matthieu Moy
Olivier Miakinen <om+ writes:

pour les raisons que j'ai avancée :

par exemple :

echo `echo `echo `echo coucou```

donne :

echo $(echo $(echo $(echo coucou)))

quelle notation te semble la plus lisible ?



La seconde, bien sûr. Mais pour ma part je n'ai jamais eu le besoin
d'imbriquer cette syntaxe.



En ligne de commande, je m'en sert rarement, mais dans des scripts, ça
n'est pas si rare.

Mais indépendament de ça, la syntaxe à base de parenthèses est bien
plus claire, surtout quand on doit la méler à des double-quotes pour
gérer correctement les espaces.

x=$(echo "$x" | sed 'whatever')

x=`echo "$x" | sed 'whatever'`

Question de gout, mais dans le premier cas, je vois immédiatement ce
qu'il se passe, et si ce n'est pas le cas, mon éditeur de texte fait
la correspondance des parenthèses.

--
Matthieu
Avatar
Cyrille Lefevre
Stephane CHAZELAS a écrit :
2008-06-22, 03:23(+02), Cyrille Lefevre:
bref, type à toujours existé, et existera surement toujours.



Non, "type" n'est pas dans tous les Bourne shells (a ete ajoute
dans SVR2 (1984) et son exit status n'a pas toujours permis
de savoir si la commande existait ou non, il fallait parser le
resultat pour "not found"). Il me semble, mais je peux me
tromper qu'il n'etait pas dans les premiers ksh88 non plus.



ce devait être les prédécesseurs du ksh (bref, le bourne koi :),
car en 11/16/88f (base irix), pas de pb.

pour autant, je me souviens également parser le résultat pour
"not found", mais ni quand, ni ou, ni qu'est-ce !

PS : j'ai toujours eu du mal avec le C façon pascal... %/ et toi ? LOL

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
Avatar
Olivier Miakinen
Le 22/06/2008 22:43, Matthieu Moy a écrit :

En ligne de commande, je m'en sert rarement, mais dans des scripts, ça
n'est pas si rare.



Pour moi c'est tout le contraire. Mais il faut dire que j'écris rarement
des scripts (et quand ça m'arrive, c'est le plus souvent un script à
usage unique, aussitôt effacé après usage).

Mais indépendament de ça, la syntaxe à base de parenthèses est bien
plus claire, surtout quand on doit la méler à des double-quotes pour
gérer correctement les espaces.

x=$(echo "$x" | sed 'whatever')

x=`echo "$x" | sed 'whatever'`



Oui, c'est incontestable.

En conclusion, je penserai à utiliser $(...) pour la lisibilité si un
jour je dois écrire un script dont la durée de vie soit supérieure à
quelques minutes, mais pour mon usage occasionnel en ligne de commande
je ne suis pas sûr de faire l'effort de changer d'habitude.


Merci à tous les deux pour vos réponses.
Avatar
Stephane CHAZELAS
2008-06-22, 22:43(+02), Matthieu Moy:
[...]
x=$(echo "$x" | sed 'whatever')

x=`echo "$x" | sed 'whatever'`

Question de gout, mais dans le premier cas, je vois immédiatement ce
qu'il se passe, et si ce n'est pas le cas, mon éditeur de texte fait
la correspondance des parenthèses.



Et si whatever contient des ou $ ou ` le comportement sera
different.

$ x=foo; x=$(echo "$x" | grep '$'); echo $x

$ x=foo; x=`echo "$x" | grep '$'`; echo $x
foo

Le pire c'est avec les doubles quotes (qu'il FAUT mettre si on
veut eviter word splitting et filename generation):

echo "`echo "`echo foo`"`"

...

--
Stéphane
1 2