redirection

Le
le pierre
Bonjour,

j'ai une boucle for en AIX (ksh) et je souhaite rediriger la sortie en
fonction des elements de ma liste :

typiquement :


export LISTE=a b c d e f

for i in $LISTE
do
echo "bonjour"
done > ${i}.log



voila en gros ce que je voudrais faire, mais ca !!ca ne marche pas,
pourquoi et que dois je faire ?


merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Pascal Bourguignon
Le #738788
le pierre
Bonjour,

j'ai une boucle for en AIX (ksh) et je souhaite rediriger la sortie en
fonction des elements de ma liste :

typiquement :


export LISTE=a b c d e f

for i in $LISTE
do
echo "bonjour"
done > ${i}.log



voila en gros ce que je voudrais faire, mais ca !!ca ne marche pas,
pourquoi et que dois je faire ?


for i in $LISTE do
echo "bonjour" > ${i}.log
done

--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.

Olivier Miakinen
Le #738787
Le 18/06/2007 16:35, Pascal Bourguignon a répondu au pierre :

export LISTE=a b c d e f



export LISTE="a b c d e f"

for i in $LISTE
do
echo "bonjour"
done > ${i}.log


for i in $LISTE do
echo "bonjour" > ${i}.log
done


D'accord pour la position du « > ${i}.log », mais pas pour celle
du « do ».

for i in $LISTE
do
echo "bonjour" > ${i}.log
done


Pascal Bourguignon
Le #738786
Olivier Miakinen
Le 18/06/2007 16:35, Pascal Bourguignon a répondu au pierre :

export LISTE=a b c d e f



export LISTE="a b c d e f"

for i in $LISTE
do
echo "bonjour"
done > ${i}.log


for i in $LISTE do
echo "bonjour" > ${i}.log
done


D'accord pour la position du « > ${i}.log », mais pas pour celle
du « do ».

for i in $LISTE
do
echo "bonjour" > ${i}.log
done


Oui, désolé, j'ai oublié le point-virgule.

for i in $LISTE ; do
echo "bonjour" > ${i}.log
done

--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.



Olivier Miakinen
Le #738473

Oui, désolé, j'ai oublié le point-virgule.

for i in $LISTE ; do
echo "bonjour" > ${i}.log
done


Oui, là je suis d'accord.

le pierre
Le #738471
On 18 juin, 18:21, Olivier Miakinen



Oui, désolé, j'ai oublié le point-virgule.

for i in $LISTE ; do
echo "bonjour" > ${i}.log
done


Oui, là je suis d'accord.


merci, mais en fait j'ai raccourcis mon exemple, mais dans la boucle
for il y a pleins de traitements, et j'esperais rediriger toutes les
sorties de chacun des traitements vers un fichier pour chaque tour de
boucle. C'est pour cela que j'ai placé le > ${i}.log a l'exterieur des
traitements.!!!! n'y a t il pas une solution pour tout rediriger y
compris les erreurs?


Vincent Lefevre
Le #738470
Dans l'article le pierre
merci, mais en fait j'ai raccourcis mon exemple, mais dans la boucle
for il y a pleins de traitements, et j'esperais rediriger toutes les
sorties de chacun des traitements vers un fichier pour chaque tour de
boucle. C'est pour cela que j'ai plac? le > ${i}.log a l'exterieur des
traitements.!!!! n'y a t il pas une solution pour tout rediriger y
compris les erreurs?


Tu peux appliquer une redirection à un bloc comme ceci:

{
echo foo
echo bar
} > fichier

Il suffit de mettre un tel bloc dans la boucle.

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

le pierre
Le #738469
On 18 juin, 20:35, Vincent Lefevre
Dans l'article le pierre
merci, mais en fait j'ai raccourcis mon exemple, mais dans la boucle
for il y a pleins de traitements, et j'esperais rediriger toutes les
sorties de chacun des traitements vers un fichier pour chaque tour de
boucle. C'est pour cela que j'ai plac? le > ${i}.log a l'exterieur des
traitements.!!!! n'y a t il pas une solution pour tout rediriger y
compris les erreurs?


Tu peux appliquer une redirection à un bloc comme ceci:

{
echo foo
echo bar

} > fichier

Il suffit de mettre un tel bloc dans la boucle.

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


ok, demain j'essaie et je vous tiens au courant.

Un grand merci a tous.


Olivier Miakinen
Le #738468

[...] n'y a t il pas une solution pour tout rediriger y
compris les erreurs?


Tu peux appliquer une redirection à un bloc comme ceci:

{
echo foo
echo bar
} > fichier


Tiens ? Je connaissais les parenthèses mais pas les accolades.

Et « 2>&1 » pour y rediriger aussi les erreurs.

Il suffit de mettre un tel bloc dans la boucle.


Donc :

for i in $LISTE ; do {
echo "bonjour $i"
echo "au revoir $i"
} > ${i}.log 2>&1
done


Vincent Lefevre
Le #738467
Dans l'article Olivier Miakinen
Tiens ? Je connaissais les parenthèses mais pas les accolades.


Les parenthèses, ça exécute un sous-shell, donc qui a un environnement
différent, et les effets secondaires éventuels (e.g. modification de
variable ou du répertoire de travail courant) ne seront pas visibles
dans le parent. Dans le cas général, l'utilisation des accolades est
la solution correcte.

Donc :

for i in $LISTE ; do {
echo "bonjour $i"
echo "au revoir $i"
} > ${i}.log 2>&1
^^^^^^^^ au cas où: "${i}.log"

done


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

le pierre
Le #738466
On 19 juin, 03:57, Vincent Lefevre
Dans l'article Olivier Miakinen
Tiens ? Je connaissais les parenthèses mais pas les accolades.


Les parenthèses, ça exécute un sous-shell, donc qui a un environnem ent
différent, et les effets secondaires éventuels (e.g. modification de
variable ou du répertoire de travail courant) ne seront pas visibles
dans le parent. Dans le cas général, l'utilisation des accolades est
la solution correcte.

Donc :
for i in $LISTE ; do {
echo "bonjour $i"
echo "au revoir $i"
} > ${i}.log 2>&1


^^^^^^^^ au cas où: "${i}.log"

done


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


Encore un petit pb :

Quelqu'un peut il me dire pourquoi quand je passe par une variable
intermediaire j'ai un decalage :

#! /bin/ksh

export LISTE_HOST="a b c d e"

export VAR
for HOST in $LISTE_HOST ; do {
VAR=$HOST
echo $VAR
} > ${VAR}.log
#}
done

le fichier a.log contient b idem pour b.log qui contient c

pourquoi ?


Publicité
Poster une réponse
Anonyme