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

redirection

22 réponses
Avatar
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

10 réponses

1 2 3
Avatar
Pascal Bourguignon
le pierre writes:

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.

Avatar
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


Avatar
Pascal Bourguignon
Olivier Miakinen <om+ writes:

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.



Avatar
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.

Avatar
le pierre
On 18 juin, 18:21, Olivier Miakinen <om+ wrote:



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?


Avatar
Vincent Lefevre
Dans l'article ,
le pierre écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
le pierre
On 18 juin, 20:35, Vincent Lefevre <vincent+ wrote:
Dans l'article ,
le pierre écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/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.


Avatar
Olivier Miakinen

[...] 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


Avatar
Vincent Lefevre
Dans l'article ,
Olivier Miakinen <om+ écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/blog/>
Work: CR INRIA - computer arithmetic / Arenaire project (LIP, ENS-Lyon)

Avatar
le pierre
On 19 juin, 03:57, Vincent Lefevre <vincent+ wrote:
Dans l'article ,
Olivier Miakinen <om+ écrit:

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 - Web: <http://www.vinc17.org/>
100% accessible validated (X)HTML - Blog: <http://www.vinc17.org/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 ?


1 2 3