Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Erreur "cp: opérande du fichier cible manquant" dans script shell [debutant]

1,120 views
Skip to first unread message

Hugues MORIN

unread,
Jul 12, 2012, 1:00:03 PM7/12/12
to
Bonjour

Voila je fais mes premiers pas dans le script shell.
Pour m'entrainer j'ai fait un script qui est sense copier des fichiers vers d'autres emplacements en leur gardant les memes proprietaires et droits, ainsi que creer une copie de sauvegarde du fichier cible.

Si ce n'ai que pour moi c'est une nouvelle syntaxe, il n'y a pas de grande difficulte.
Neanmoins, j'ai l'erreur suivante a chaque "cp" executes:

cp: opérande du fichier cible manquant apres `/home/..../password_forgotten.php'
Pour en savoir davantage, faites: " cp --help ".

J'ai biensur cherche dans le man et sur mon ami google, mais j'ai rien trouve qui resolve mon probleme.
Si je passe le "cp" manuellement en ligne de commande, cela fonctionne O_o

Voici le script:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy

echo "Treatment..."

BASE_FOLDER=/home/user/public_html/
LANG_FOLDER=/includes/languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ] && [ $i -lt ${#SITE[*]} ]
do 
#echo "test 1 ok - "$i" - "${DEV_VER[0]}/${SITE[i]}
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 ] && [ $j -lt ${#LANGUE[*]} ]
do
#echo "test 2 ok - "$j" - "${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ] && [ $k -lt ${#DEV_VER[*]} ]
do
#echo "test 3 ok - "$k" - "${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
#echo $cpt" - cp -b -p --suffix=.bak $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}"
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."${LANGUE[j]}/$1" to "${DEV_VER[k]}/${SITE[i]}...${LANGUE[j]}
cp -b -p --suffix=.bak $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
k=$(($k+1))
cpt=$(($cpt+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Cordialement
Hugues



Sébastien MARQUE

unread,
Jul 13, 2012, 2:20:02 AM7/13/12
to
Bonjour,

tout l'info est dans le message d'erreur: "opérande du fichier cible
manquant", il manque la destination.

La raison est simple: entre les larmes qui me brouillent la vue en
voyant ton algo ;), j'ai pu discerner des choses du genre
'${DEV_VER[k]}', ce qui ne va pas renvoyer grand chose dans ton cas.

En bash on "expand" les variables. La lettre 'k' a donc pour valeur 'k',
et $k (ou ${k}) a pour valeur le contenu de la variable k.

${DEV_VER[$k]} ou ${DEV_VER[${k}]} donneront un résultat plus conforme à
ce que tu attends.

Cordialement.
seb
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/4FFFBC6F...@free.fr

Hugues MORIN

unread,
Jul 13, 2012, 9:20:01 AM7/13/12
to
Bonjour

J'ai trouve l'erreur, a la place d'ecrire:
cp -b -p --suffix=.bak /home/user/public_html/alpha/www/includes/languages/english/password_forgotten.php /home/user/public_html/beta/www/includes/languages/english

Suite a une erreur "d'encodage", il ecrivait:
cp -b -p --suffix=.bak /home/ user /public_html/alpha/www/includes/languages/english/password_forgotten.php /home/user/public_html/beta/www/includes/languages/english

A priori, pour un tableau, il n'est pas necessaire de mettre le $ dans  '${DEV_VER[k]}' .
Sa fonctionne sans. o_O
Mais je ne sais si sa fonctionne juste par hasard ou si c'est le comportement normal.

Question subsidiaire: 
Sebastien, c'est juste parce qu'il est "visuellement" tres charge que ca pique les yeux :D ou alors parce qu'il est trop lourd ou trop archaique?
Comme je l'ai marque en objet, c'est mon 1er script don je suppose qu'il y a des trucs a ameliorer mais quoi?


Cordialement
Hugues

PS: le code du script (nettoye des commentaires) qui fonctionne:

#!/bin/bash
# Copy alpha version language file to beta and production
# only 1 argument: alpha version language file must be copy

echo "Treatment..."

BASE_FOLDER=/home/user/public_html/
LANG_FOLDER=/includes/languages/
DEV_VER=("alpha" "beta" "production")
LANGUE=("english" "espanol" "french" "italian")
SITE=("www" "www2")
i=0
cpt=1

while [ -d $BASE_FOLDER${DEV_VER[0]}/${SITE[i]} ] && [ $i -lt ${#SITE[*]} ]
do 
j=0
while [ -f $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 ] && [ $j -lt ${#LANGUE[*]} ]
do
k=1
while [ -d $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]} ] && [ $k -lt ${#DEV_VER[*]} ]
do
echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."${LANGUE[j]}/$1" to "${DEV_VER[k]}/${SITE[i]}...${LANGUE[j]}
cp -b -p --suffix=.bak $BASE_FOLDER${DEV_VER[0]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}/$1 $BASE_FOLDER${DEV_VER[k]}/${SITE[i]}$LANG_FOLDER${LANGUE[j]}
k=$(($k+1))
done
j=$(($j+1))
done
i=$(($i+1))
done

exit 0


Basile Starynkevitch

unread,
Jul 15, 2012, 3:50:01 AM7/15/12
to
On Thu, 12 Jul 2012 18:52:26 +0200
Hugues MORIN <mor...@gmail.com> wrote:

> Bonjour
>
> Voila je fais mes premiers pas dans le script shell.
> Pour m'entrainer j'ai fait un script qui est sense copier des fichiers vers
> d'autres emplacements en leur gardant les memes proprietaires et droits,
> ainsi que creer une copie de sauvegarde du fichier cible.


Un conseil pour déboguer un script shell: Mettre le temps du déboguage les options v et x
dans la première ligne, cad #!/bin/bash -vx

Note aussi que le shell posix /bin/sh est différent du bash.


Cordialement

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/20120715094928.01b5...@starynkevitch.net

Hugues MORIN

unread,
Jul 15, 2012, 2:00:02 PM7/15/12
to
Salut
 
Merci pour l'astuce, ca va me simplifier les choses.
 
Pour info (pour ceux qui lirons ce post en archive), le -vx est d'autres methodes de debuggage sont exliquees la:
 
Cordialement
Hugues

Sébastien MARQUE

unread,
Jul 16, 2012, 2:40:02 AM7/16/12
to
Bonjour,

oui, si �a me piquait les yeux c'est surtout parce que c'�tait difficile
� lire (majuscules, pas d'espace, signes cabalistiques toussa toussa)
:), apr�s ce sont des go�ts personnels qui peuvent tr�s bien ne pas �tre
les plus judicieux:

* je trouve les tests
"[ expr1 ] && [ expr2]"
moins �l�gants que
"[ expr1 -a expr2 ]"

* les incr�mentations
"i=$(($i+1))"
sont facilement rempla�ables par des
"let i++" ou "let 'i += 1'"

* je pr�f�re les boucles
"for (( i = 0; ; i++ )); do ... [ ! -e ${CHEMIN[$i} ] && break; done" aux
"i=0; while [ -e ${CHEMIN[$i]} ]; do ... i=$(($i+1)); done",
bien que c'est vrai que dans ce cas for ne peut pas �valuer de test non
arithm�tique ni faire appel � une fonction, d'o� le "[ ! test ] &&
break", mais d'un autre c�t� initialisation et incr�mentation sont fait
par une m�me instruction.

* enfin puisqu'on est dans un fichier et qu'on est pas � quelques octets
pr�s:
"cp -p"
peut aussi s'�crire
"cp --preserve=mode,ownership,timestamps"
de mettre les version longues des options permet de mieux voir ce qui
est fait, et si tu mets la commande longue dans une variable �a �claire
encore mieux.

voil� c'est tout :)

et aussi merci car j'avais jamais fait attention que l'indexation de
tableau pouvait se faire sans passer par les substitutions.

Cordialement.
seb

Le 13/07/2012 15:09, Hugues MORIN a �crit :
> Bonjour
>
> J'ai trouve l'erreur, a la place d'ecrire:
> cp -b -p --suffix=.bak
> /home/user/public_html/alpha/www/includes/languages/english/password_forgotten.php
> /home/user/public_html/beta/www/includes/languages/english
>
> Suite a une erreur "d'encodage", il ecrivait:
> cp -b -p --suffix=.bak� /home/
> Le 13 juillet 2012 08:13, S�bastien MARQUE<seb.m...@free.fr> a �crit :
>
>> Bonjour,
>>
>> tout l'info est dans le message d'erreur: "op�rande du fichier cible
>> manquant", il manque la destination.
>>
>> La raison est simple: entre les larmes qui me brouillent la vue en voyant
>> ton algo ;), j'ai pu discerner des choses du genre '${DEV_VER[k]}', ce qui
>> ne va pas renvoyer grand chose dans ton cas.
>>
>> En bash on "expand" les variables. La lettre 'k' a donc pour valeur 'k',
>> et $k (ou ${k}) a pour valeur le contenu de la variable k.
>>
>> ${DEV_VER[$k]} ou ${DEV_VER[${k}]} donneront un r�sultat plus conforme �
>> ce que tu attends.
>>
>> Cordialement.
>> seb
>>
>> Le 12/07/2012 18:52, Hugues MORIN a �crit :
>>
>> Bonjour
>>>
>>> Voila je fais mes premiers pas dans le script shell.
>>> Pour m'entrainer j'ai fait un script qui est sense copier des fichiers
>>> vers
>>> d'autres emplacements en leur gardant les memes proprietaires et droits,
>>> ainsi que creer une copie de sauvegarde du fichier cible.
>>>
>>> Si ce n'ai que pour moi c'est une nouvelle syntaxe, il n'y a pas de grande
>>> difficulte.
>>> Neanmoins, j'ai l'erreur suivante a chaque "cp" executes:
>>>
>>> cp: op�rande du fichier cible manquant apres
>>> `/home/..../password_**forgotten.php'
>>> Pour en savoir davantage, faites: " cp --help ".
>>>
>>> J'ai biensur cherche dans le man et sur mon ami google, mais j'ai rien
>>> trouve qui resolve mon probleme.
>>> Si je passe le "cp" manuellement en ligne de commande, cela fonctionne O_o
>>>
>>> Voici le script:
>>>
>>> #!/bin/bash
>>> # Copy alpha version language file to beta and production
>>> # only 1 argument: alpha version language file must be copy
>>> # TUTO: http://doc.ubuntu-fr.org/**tutoriel/script_shell<http://doc.ubuntu-fr.org/tutoriel/script_shell>
>>>
>>> echo "Treatment..."
>>>
>>> BASE_FOLDER=/home/user/public_**html/
>>> LANG_FOLDER=/includes/**languages/
>>> DEV_VER=("alpha" "beta" "production")
>>> LANGUE=("english" "espanol" "french" "italian")
>>> SITE=("www" "www2")
>>> i=0
>>> cpt=1
>>>
>>> while [ -d $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]} ]&& [ $i -lt
>>> ${#SITE[*]} ]
>>> do
>>> #echo "test 1 ok - "$i" - "${DEV_VER[0]}/${SITE[i]}
>>> j=0
>>> while [ -f $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**
>>> j]}/$1
>>> ]&& [ $j -lt ${#LANGUE[*]} ]
>>> do
>>> #echo "test 2 ok - "$j" -
>>> "${DEV_VER[0]}/${SITE[i]}$**LANG_FOLDER${LANGUE[j]}/$1
>>> k=1
>>> while [ -d $BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}
>>> ]
>>> && [ $k -lt ${#DEV_VER[*]} ]
>>> do
>>> #echo "test 3 ok - "$k" - "${DEV_VER[k]}/${SITE[i]}$**
>>> LANG_FOLDER${LANGUE[j]}
>>> #echo $cpt" - cp -b -p --suffix=.bak
>>> $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}/$1
>>> $BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}"
>>> echo "copy from "${DEV_VER[0]}/${SITE[i]}"..."**${LANGUE[j]}/$1" to
>>> "${DEV_VER[k]}/${SITE[i]}...${**LANGUE[j]}
>>> cp -b -p --suffix=.bak
>>> $BASE_FOLDER${DEV_VER[0]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}/$1
>>> $BASE_FOLDER${DEV_VER[k]}/${**SITE[i]}$LANG_FOLDER${LANGUE[**j]}
>>> k=$(($k+1))
>>> cpt=$(($cpt+1))
>>> done
>>> j=$(($j+1))
>>> done
>>> i=$(($i+1))
>>> done
>>>
>>> exit 0
>>>
>>>
>>> Cordialement
>>> Hugues
>>>
>>>
>> --
>> Lisez la FAQ de la liste avant de poser une question :
>> http://wiki.debian.org/fr/**FrenchLists<http://wiki.debian.org/fr/FrenchLists>
>>
>> Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
>> vers debian-user-french-REQUEST@**lists.debian.org<debian-user-f...@lists.debian.org>
>> En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
>> Archive: http://lists.debian.org/**4FFFBC6F...@free.fr<http://lists.debian.org/4FFFBC6F...@free.fr>
>>
>>
>

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/5003B635...@free.fr

Daniel Huhardeaux

unread,
Jul 16, 2012, 3:20:01 AM7/16/12
to
Bonjour

Le 16/07/2012 08:35, S�bastien MARQUE a �crit :
> Bonjour,
>
> oui, si �a me piquait les yeux c'est surtout parce que c'�tait
> difficile � lire (majuscules, pas d'espace, signes cabalistiques
> toussa toussa) :), apr�s ce sont des go�ts personnels qui peuvent tr�s
> bien ne pas �tre les plus judicieux:
>
> * je trouve les tests
> "[ expr1 ] && [ expr2]"
> moins �l�gants que
> "[ expr1 -a expr2 ]"

Ce n'est pas la m�me chose. Le premier exemple dit "expr2 est r�alis�e
si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont vrais"

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/5003BFC2...@tootai.net

seb.m...@free.fr

unread,
Jul 16, 2012, 8:40:01 AM7/16/12
to
C'est incontestable :)

mais j'avoue préférer:
action1 && action2

et

[ expr1 -a expr2 ]
ou mieux
test expr1 -a expr2

action2 n'est entreprise que si action1 se termine correctement, mais ce sont des actions et il peut être dommageable d'exécuter action2 si action1 ne se passe pas bien.

En revanche pour un test, surtout complexe, je préfère n'utiliser qu'une seule instance de test (ou [). Les tests n'étant qu'arithmétiques il n'y a pas de "danger" à évaluer expr2 si expr1 est faux. Ça a l'avantage de lancer un seul processus au lieu de deux (ou plus) et je perçois l'avantage comme celui d'un (joli) "grep foo bar" par rapport à un (horrible) "cat bar | grep foo" :).

D'ailleurs, je n'en ai pas la moindre idée mais ça ne m'étonnerait pas que [ évalue un peu intelligemment et donc se passe d'évaluations inutiles (faudrait zieuter le code source, le man n'en parle pas)

Cordialement
seb

----- Mail original -----
De: "Daniel Huhardeaux" <no-...@tootai.net>
À: debian-us...@lists.debian.org
Envoyé: Lundi 16 Juillet 2012 09:16:18
Objet: Re: Erreur "cp: opérande du fichier cible manquant" dans script shell [debutant]

Bonjour

Le 16/07/2012 08:35, Sébastien MARQUE a écrit :
> Bonjour,
>
> oui, si ça me piquait les yeux c'est surtout parce que c'était
> difficile à lire (majuscules, pas d'espace, signes cabalistiques
> toussa toussa) :), après ce sont des goûts personnels qui peuvent très
> bien ne pas être les plus judicieux:
>
> * je trouve les tests
> "[ expr1 ] && [ expr2]"
> moins élégants que
> "[ expr1 -a expr2 ]"

Ce n'est pas la même chose. Le premier exemple dit "expr2 est réalisée
si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont vrais"

--
Daniel

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/5003BFC2...@tootai.net

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/1300833691.35769510.134...@zimbra33-e6.priv.proxad.net

Hugues MORIN

unread,
Jul 17, 2012, 5:10:02 AM7/17/12
to
Salut


Seb, merci pour tes remarques. :D

Moi aussi (malgre que ce soit moi qui l'est ecrit), ca me piquait les yeux ;-)
Au prochain script, j'appliquerai tes conseils.

Par contre, j'ai un peu de mal a comprendre la subtilite sur "[ expr1 ] && [ expr2]" et "[ expr1 -a expr2 ]"

Daniel: "Ce n'est pas la même chose. Le premier exemple dit "expr2 est réalisée si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont vrais"

Seb:"action2 n'est entreprise que si action1 se termine correctement, mais ce sont des actions et il peut être dommageable d'exécuter action2 si action1 ne se passe pas bien."

Je pensais que ces 2 syntaxes etaient equivalentes.

Si j'ai bien compris vos propos alors dans le cas de la 1er syntaxe, [ expr1 ] est evalue, si le resultat est "faux" alors le test "[ expr1 ] && [ expr2]" est stoppe et renvoi "faux" comme resultat, et cela sans que  [ expr2 ] est ete evalue.

Dans le cas de la 2eme syntaxe,  [ expr1 ] est evalue,  [ expr2 ] est evalue, et ensuite le test "[ expr1 -a expr2 ]" est evalue pour donne un resultat.

Est ce bien cela?

C'est vrai que dans le cas ou "expr1" ou "expr2" realise une action, de connaitre cet difference peut etre tres utile.



Cordialement
Hugues

Daniel Huhardeaux

unread,
Jul 17, 2012, 6:00:02 AM7/17/12
to
Bonjour

Le 17/07/2012 11:04, Hugues MORIN a �crit :

[...]

>
> Par contre, j'ai un peu de mal a comprendre la subtilite sur "[ expr1
> ] && [ expr2]" et "[ expr1 -a expr2 ]"
>
> Daniel: "Ce n'est pas la m�me chose. Le premier exemple dit "expr2 est
> r�alis�e si expr1 est vrai". Le second exemple dit "si expr1 ET expr2
> sont vrais"
>
> Seb:"action2 n'est entreprise que si action1 se termine correctement,
> mais ce sont des actions et il peut �tre dommageable d'ex�cuter
> action2 si action1 ne se passe pas bien."
>
> Je pensais que ces 2 syntaxes etaient equivalentes.

Non

>
> Si j'ai bien compris vos propos alors dans le cas de la 1er syntaxe, [
> expr1 ] est evalue, si le resultat est "faux" alors le test "[ expr1 ]
> && [ expr2]" est stoppe et renvoi "faux" comme resultat, et cela sans
> que [ expr2 ] est ete evalue.

Oui, mais le renvoi "faux" me d�range car expr peut �tre une commande,
c'est donc la sortie de cette commande qui sera analys�e. Il faut voir
cela comme "si expr1 est �valu�e/ex�cut�e et que le r�sultat est
vrai/sans erreur alors expr2 est �valu�e/ex�cut�e"

>
> Dans le cas de la 2eme syntaxe, [ expr1 ] est evalue, [ expr2 ] est
> evalue, et ensuite le test "[ expr1 -a expr2 ]" est evalue pour donne
> un resultat.

M�me pas: si expr1 est faux expr2 n'est m�me pas �valu�e/ex�cut�e.

>
> Est ce bien cela?

Maintenant oui ;-)
>
> C'est vrai que dans le cas ou "expr1" ou "expr2" realise une action,
> de connaitre cet difference peut etre tres utile.

Tout � fait.

>
> C'est incontestable :)
>
> mais j'avoue pr�f�rer:
> action1 && action2
>
> et
>
> [ expr1 -a expr2 ]
> ou mieux
> test expr1 -a expr2
>
> action2 n'est entreprise que si action1 se termine correctement,
> mais ce sont des actions et il peut �tre dommageable d'ex�cuter
> action2 si action1 ne se passe pas bien.
>
> En revanche pour un test, surtout complexe, je pr�f�re n'utiliser
> qu'une seule instance de test (ou [). Les tests n'�tant
> qu'arithm�tiques il n'y a pas de "danger" � �valuer expr2 si expr1
> est faux. �a a l'avantage de lancer un seul processus au lieu de
> deux (ou plus) et je per�ois l'avantage comme celui d'un (joli)
> "grep foo bar" par rapport � un (horrible) "cat bar | grep foo" :).
>
> D'ailleurs, je n'en ai pas la moindre id�e mais �a ne m'�tonnerait
> pas que [ �value un peu intelligemment et donc se passe
> d'�valuations inutiles (faudrait zieuter le code source, le man
> n'en parle pas)
>
> Cordialement
> seb
>
> ----- Mail original -----
> De: "Daniel Huhardeaux" <no-...@tootai.net
> <mailto:no-...@tootai.net>>
> �: debian-us...@lists.debian.org
> <mailto:debian-us...@lists.debian.org>
> Envoy�: Lundi 16 Juillet 2012 09:16:18
> Objet: Re: Erreur "cp: op�rande du fichier cible manquant" dans
> script shell [debutant]
>
> Bonjour
>
> Le 16/07/2012 08:35, S�bastien MARQUE a �crit :
> > Bonjour,
> >
> > oui, si �a me piquait les yeux c'est surtout parce que c'�tait
> > difficile � lire (majuscules, pas d'espace, signes cabalistiques
> > toussa toussa) :), apr�s ce sont des go�ts personnels qui
> peuvent tr�s
> > bien ne pas �tre les plus judicieux:
> >
> > * je trouve les tests
> > "[ expr1 ] && [ expr2]"
> > moins �l�gants que
> > "[ expr1 -a expr2 ]"
>
> Ce n'est pas la m�me chose. Le premier exemple dit "expr2 est r�alis�e
> si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont
> vrais"
>
> --
> Daniel
>
> --
> Lisez la FAQ de la liste avant de poser une question :
> http://wiki.debian.org/fr/FrenchLists
>
> Pour vous DESABONNER, envoyez un message avec comme objet
> "unsubscribe"
> vers debian-user-f...@lists.debian.org
> <mailto:debian-user-f...@lists.debian.org>
> En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
> <mailto:listm...@lists.debian.org>
> Archive: http://lists.debian.org/5003BFC2...@tootai.net
>
> --
> Lisez la FAQ de la liste avant de poser une question :
> http://wiki.debian.org/fr/FrenchLists
>
> Pour vous DESABONNER, envoyez un message avec comme objet
> "unsubscribe"
> vers debian-user-f...@lists.debian.org
> <mailto:debian-user-f...@lists.debian.org>
> En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
> <mailto:listm...@lists.debian.org>
> Archive:
> http://lists.debian.org/1300833691.35769510.134...@zimbra33-e6.priv.proxad.net
>
>
> Le 16 juillet 2012 14:37, <seb.m...@free.fr
> <mailto:seb.m...@free.fr>> a �crit :

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-f...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org
Archive: http://lists.debian.org/50053719...@tootai.net

Hugues MORIN

unread,
Jul 19, 2012, 4:00:02 PM7/19/12
to
Salut
 
Merci a tous pour vos reponses et votre aide :D
 
Je pense que ca me sera tres utile, tres bientot
 
Cordialement
Hugues
 
 


 
Le 17 juillet 2012 11:57, Daniel Huhardeaux <no-...@tootai.net> a écrit :
Bonjour


Le 17/07/2012 11:04, Hugues MORIN a écrit :

[...]

Par contre, j'ai un peu de mal a comprendre la subtilite sur "[ expr1 ] && [ expr2]" et "[ expr1 -a expr2 ]"

Daniel: "Ce n'est pas la même chose. Le premier exemple dit "expr2 est réalisée si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont vrais"

Seb:"action2 n'est entreprise que si action1 se termine correctement, mais ce sont des actions et il peut être dommageable d'exécuter action2 si action1 ne se passe pas bien."


Je pensais que ces 2 syntaxes etaient equivalentes.
Non



Si j'ai bien compris vos propos alors dans le cas de la 1er syntaxe, [ expr1 ] est evalue, si le resultat est "faux" alors le test "[ expr1 ] && [ expr2]" est stoppe et renvoi "faux" comme resultat, et cela sans que  [ expr2 ] est ete evalue.

Oui, mais le renvoi "faux" me dérange car expr peut être une commande, c'est donc la sortie de cette commande qui sera analysée. Il faut voir cela comme "si expr1 est évaluée/exécutée et que le résultat est vrai/sans erreur alors expr2 est évaluée/exécutée"



Dans le cas de la 2eme syntaxe,  [ expr1 ] est evalue,  [ expr2 ] est evalue, et ensuite le test "[ expr1 -a expr2 ]" est evalue pour donne un resultat.

Même pas: si expr1 est faux expr2 n'est même pas évaluée/exécutée.



Est ce bien cela?

Maintenant oui ;-)


C'est vrai que dans le cas ou "expr1" ou "expr2" realise une action, de connaitre cet difference peut etre tres utile.

Tout à fait.


    C'est incontestable :)

    mais j'avoue préférer:

    action1 && action2

    et

    [ expr1 -a expr2 ]
    ou mieux
    test expr1 -a expr2

    action2 n'est entreprise que si action1 se termine correctement,
    mais ce sont des actions et il peut être dommageable d'exécuter

    action2 si action1 ne se passe pas bien.

    En revanche pour un test, surtout complexe, je préfère n'utiliser
    qu'une seule instance de test (ou [). Les tests n'étant
    qu'arithmétiques il n'y a pas de "danger" à évaluer expr2 si expr1
    est faux. Ça a l'avantage de lancer un seul processus au lieu de
    deux (ou plus) et je perçois l'avantage comme celui d'un (joli)

    "grep foo bar" par rapport à un (horrible) "cat bar | grep foo" :).

    D'ailleurs, je n'en ai pas la moindre idée mais ça ne m'étonnerait
    pas que [ évalue un peu intelligemment et donc se passe
    d'évaluations inutiles (faudrait zieuter le code source, le man

    n'en parle pas)

    Cordialement
    seb

    ----- Mail original -----
    De: "Daniel Huhardeaux" <no-...@tootai.net
    <mailto:no-...@tootai.net>>
    À: debian-user-french@lists.debian.org
    <mailto:debian-user-french@lists.debian.org>

    Envoyé: Lundi 16 Juillet 2012 09:16:18
    Objet: Re: Erreur "cp: opérande du fichier cible manquant" dans
    script shell [debutant]

    Bonjour

    Le 16/07/2012 08:35, Sébastien MARQUE a écrit :
    > Bonjour,
    >
    > oui, si ça me piquait les yeux c'est surtout parce que c'était
    > difficile à lire (majuscules, pas d'espace, signes cabalistiques
    > toussa toussa) :), après ce sont des goûts personnels qui
    peuvent très
    > bien ne pas être les plus judicieux:

    >
    > * je trouve les tests
    > "[ expr1 ] && [ expr2]"
    > moins élégants que
    > "[ expr1 -a expr2 ]"

    Ce n'est pas la même chose. Le premier exemple dit "expr2 est réalisée

    si expr1 est vrai". Le second exemple dit "si expr1 ET expr2 sont
    vrais"

    --
    Daniel

    --
    Lisez la FAQ de la liste avant de poser une question :
    http://wiki.debian.org/fr/FrenchLists

    Pour vous DESABONNER, envoyez un message avec comme objet
    "unsubscribe"

    En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org

    Archive: http://lists.debian.org/5003BFC2...@tootai.net

    --
    Lisez la FAQ de la liste avant de poser une question :
    http://wiki.debian.org/fr/FrenchLists

    Pour vous DESABONNER, envoyez un message avec comme objet
    "unsubscribe"

    En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org



Le 16 juillet 2012 14:37, <seb.m...@free.fr <mailto:seb.m...@free.fr>> a écrit :

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"

En cas de soucis, contactez EN ANGLAIS listm...@lists.debian.org

0 new messages