[HS] Comportement bizarre de bash

Le
Bonjour à tous.

Je fais :

toto@debian$ {count; echo $count}
10
toto@debian$ echo $count
10
toto@debian$ {count; echo $count}
12
toto@debian$ echo $count
12
toto@debian$ {count=9; echo $count}|less
9
toto@debian$ echo $count
12
toto@debian$ {count=9; echo $count}|xargs echo
9
toto@debian$ echo $count
12

Étonnant, non ?

Du coup, si vous êtes amenés à faire des calculs
qui utilisent une variable et un xargs,
ceux ci peuvent être faux, sans que vous
compreniez vraiment pourquoi.

Comme par exemple, la ligne suivante :
(C'est une seule ligne)

{ count=0; for I in wget-log*; do if grep -qi
"forbidden|sauvegardé|rien à faire" $I; then echo -n; else
count=$(expr $count + 1); echo; echo $I; tail $I; fi; done; echo; echo
"total = " $count; }|grep KB|cut -d% -f2|cut -dK -f1|xargs -n 1
printf "+ %s "|xargs -d'' printf "(0 %s) / $count"|xargs -d''
echo|bc -l

Si vous avez déjà rencontré ce comportement,
et / ou si vous en connaissez l'explication,
je serais ravi de bénéficier de vos lunières
et commentaires.

FA










___________________________________________________________________________
Découvrez une nouvelle façon d'obtenir des réponses à toutes vos questions !
Profitez des connaissances, des opinions et des expériences des internautes sur Yahoo! Questions/Réponses
http://fr.answers.yahoo.com


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
fra-duf-no-spam
Le #9569581
Le 13672ième jour après Epoch, fully associative-debian écri vait:

Bonjour à tous.

Je fais :

$ {count; echo $count}
10
$ echo $count
10
$ {count; echo $count}
12
$ echo $count
12
$ {count=9; echo $count}|less
9
$ echo $count
12
$ {count=9; echo $count}|xargs echo
9
$ echo $count
12



Eh bien, tu en fais des choses :)

Ce qui est bien, c'est qu'avec tes tests tu as tous les moyens de
comprendre tout ce qu'il se passe.

Étonnant, non ?



Pas tant que ça en fait. En gros, dans tous les cas que tu testes sans
le pipe, le shell ne va pas créer un nouveau process, les variables
vont donc faire partie du shell interactif.

Par contre, dès lors que tu vas devoir lui faire manipuler les entrà ©es
sorties (en gros), alors le shell va créer un process pour pouvoir en
changer les std*.

À toi pour de nouveaux tests et de nouvelles expériences :)

--
La vraie science est philosophique.
-+- Max Born (1882-1970) -+-
Vincent Lefevre
Le #9569491
On 2007-06-09 00:08:43 +0200, François TOURDE wrote:
Pas tant que ça en fait. En gros, dans tous les cas que tu testes
sans le pipe, le shell ne va pas créer un nouveau process, les
variables vont donc faire partie du shell interactif.



À noter que zsh a un comportement différent, peut-être moins intuitif,
mais plus pratique (c'est une FAQ).

--
Vincent Lefèvre 100% accessible validated (X)HTML - Blog: Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Publicité
Poster une réponse
Anonyme