Bonjour, j'ai une différence d'éxécution de cut dans un script
et directement en ligne de commande.
Je sais que lorsque j'enlève le pipe avec cut le comportement redevient
normal
commande qui sera dans un script :
[host]#for I in `grep -v "#" monfic | cut -d: -f1,2,3,4 `;do echo "$I---" ;
done;
"Jean---
Dupond1":*:*:10.0.0.1---
"Jean---
Dupond2":*:*:10.0.0.2---
"Jean---
Dupond3":*:*:10.0.0.3---
note : je demande le champs 1,2,3,4 pour tester, et j'ajoute le --- pour
comprendre où est la fin de $I.
commande qui sera dans un script : [host]#for I in `grep -v "#" monfic | cut -d: -f1,2,3,4 `;do echo "$I---" ; done; "Jean--- Dupond1":*:*:10.0.0.1--- "Jean--- Dupond2":*:*:10.0.0.2--- "Jean--- Dupond3":*:*:10.0.0.3---
Là c'est simple, l'output de "grep -v "#" monfic | cut -d: -f1,2,3,4" est découpé (par l'utilisation des `...`), sur les sauts de lignes, mais aussi sur les espaces et les tabulations (enfin tous les caractère qui composent le paramètre spécial IFS).
Tu devrais donc faire: IFS=' ' # juste un saut de ligne; set -f for i in `...
-- Stéphane
Le Fri, 11 Jul 2003 10:50:37 +0200, Jo <Jo@PADYMEL.com> écrivait :
[...]
commande qui sera dans un script :
[host]#for I in `grep -v "#" monfic | cut -d: -f1,2,3,4 `;do echo "$I---" ;
done;
"Jean---
Dupond1":*:*:10.0.0.1---
"Jean---
Dupond2":*:*:10.0.0.2---
"Jean---
Dupond3":*:*:10.0.0.3---
Là c'est simple, l'output de "grep -v "#" monfic | cut -d:
-f1,2,3,4" est découpé (par l'utilisation des `...`), sur les
sauts de lignes, mais aussi sur les espaces et les tabulations
(enfin tous les caractère qui composent le paramètre spécial
IFS).
Tu devrais donc faire:
IFS='
' # juste un saut de ligne;
set -f
for i in `...
commande qui sera dans un script : [host]#for I in `grep -v "#" monfic | cut -d: -f1,2,3,4 `;do echo "$I---" ; done; "Jean--- Dupond1":*:*:10.0.0.1--- "Jean--- Dupond2":*:*:10.0.0.2--- "Jean--- Dupond3":*:*:10.0.0.3---
Là c'est simple, l'output de "grep -v "#" monfic | cut -d: -f1,2,3,4" est découpé (par l'utilisation des `...`), sur les sauts de lignes, mais aussi sur les espaces et les tabulations (enfin tous les caractère qui composent le paramètre spécial IFS).
Tu devrais donc faire: IFS=' ' # juste un saut de ligne; set -f for i in `...
-- Stéphane
Stephane Dupille
< snip >
si je passe la commande [host]#for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done; 10.0.0.1 fic1 fic2 fic3 10.0.0.3
Chez moi ça marche : ~> for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done; 10.0.0.1 10.0.0.2 10.0.0.3
Quel est le shell utilisé ? Moi j'ai utilisé zsh, mais avec bash ça tourne aussi. csh m'envoie chier (il ne connait pas for).
Pour info, j'ai utilisé le gnu-cut sous linux, et j'ai également essayé avec le cut FreeBSD, qui marche bien également.
Tu es sûr que la variable $I n'a pas été déjà définie auparavant ? En changeant la variable, ça donne quoi ?
-- Floriano veux détruire le ng , alors pour quoi ne pas le résusiter juste après sa destruction je m'explique il ne veux plus de ce groupe ben ont en recrée un nouveau du même nom -+- L in GNU - Neuneu fait des miracles -+-
< snip >
si je passe la commande
[host]#for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done;
10.0.0.1
fic1
fic2
fic3
10.0.0.3
Chez moi ça marche :
~> for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done;
10.0.0.1
10.0.0.2
10.0.0.3
Quel est le shell utilisé ? Moi j'ai utilisé zsh, mais avec bash ça
tourne aussi. csh m'envoie chier (il ne connait pas for).
Pour info, j'ai utilisé le gnu-cut sous linux, et j'ai également
essayé avec le cut FreeBSD, qui marche bien également.
Tu es sûr que la variable $I n'a pas été déjà définie auparavant ?
En changeant la variable, ça donne quoi ?
--
Floriano veux détruire le ng , alors pour quoi ne pas le résusiter
juste après sa destruction je m'explique il ne veux plus de ce groupe
ben ont en recrée un nouveau du même nom
-+- L in GNU - Neuneu fait des miracles -+-
si je passe la commande [host]#for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done; 10.0.0.1 fic1 fic2 fic3 10.0.0.3
Chez moi ça marche : ~> for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done; 10.0.0.1 10.0.0.2 10.0.0.3
Quel est le shell utilisé ? Moi j'ai utilisé zsh, mais avec bash ça tourne aussi. csh m'envoie chier (il ne connait pas for).
Pour info, j'ai utilisé le gnu-cut sous linux, et j'ai également essayé avec le cut FreeBSD, qui marche bien également.
Tu es sûr que la variable $I n'a pas été déjà définie auparavant ? En changeant la variable, ça donne quoi ?
-- Floriano veux détruire le ng , alors pour quoi ne pas le résusiter juste après sa destruction je m'explique il ne veux plus de ce groupe ben ont en recrée un nouveau du même nom -+- L in GNU - Neuneu fait des miracles -+-
Jo
"Stephane CHAZELAS" a écrit dans le message news:
Je pense que si tu rajoutais "set -f" avant le for, tu verrais:
10.0.0.1 * 10.0.0.3
ok, quand je mets "set -f" avant le for çà marche.
Pourquoi ?
à quoi sert ce set -f ?
Jo
"Stephane CHAZELAS" <stephane_chazelas@yahoo.fr> a écrit dans le message
news: slrnbgt214.3u.stephane_chazelas@pcchazelas.free.fr...
Je pense que si tu rajoutais "set -f" avant le for, tu verrais:
10.0.0.1
*
10.0.0.3
ok, quand je mets "set -f" avant le for çà marche.
Je pense que si tu rajoutais "set -f" avant le for, tu verrais:
10.0.0.1 * 10.0.0.3
ok, quand je mets "set -f" avant le for çà marche.
Pourquoi ?
à quoi sert ce set -f ?
Jo
Jo
"Stephane Dupille" <sdupille+ a écrit dans le message news:
Chez moi ça marche : ~> for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done; 10.0.0.1 10.0.0.2 10.0.0.3 Le fichier que j'ai donné est extrait.
sur un petite taille je n'ai pas le problème.
Quel est le shell utilisé ? Moi j'ai utilisé zsh, mais avec bash ça tourne aussi. csh m'envoie chier (il ne connait pas for). bash
Pour info, j'ai utilisé le gnu-cut sous linux, et j'ai également essayé avec le cut FreeBSD, qui marche bien également. j'ai utilisé un cut sous linux noyau 2.4 (redhat 8)
#cut --version cut (textutils) 2.0.21 crit par David Ihnat, David MacKenzie, and Jim Meyering. Copyright (C) 2002 Free Software Foundation, Inc. ...
Tu es sûr que la variable $I n'a pas été déjà définie auparavant ? oui
En changeant la variable, ça donne quoi ? idem.
Jo
"Stephane Dupille" <sdupille+news@teaser.fr> a écrit dans le message news:
871xwx8ibi.fsf@aragorn.dustnet.teaser.fr...
Chez moi ça marche :
~> for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done;
10.0.0.1
10.0.0.2
10.0.0.3
Le fichier que j'ai donné est extrait.
sur un petite taille je n'ai pas le problème.
Quel est le shell utilisé ? Moi j'ai utilisé zsh, mais avec bash ça
tourne aussi. csh m'envoie chier (il ne connait pas for).
bash
Pour info, j'ai utilisé le gnu-cut sous linux, et j'ai également
essayé avec le cut FreeBSD, qui marche bien également.
j'ai utilisé un cut sous linux noyau 2.4 (redhat 8)
#cut --version
cut (textutils) 2.0.21
crit par David Ihnat, David MacKenzie, and Jim Meyering.
Copyright (C) 2002 Free Software Foundation, Inc.
...
Tu es sûr que la variable $I n'a pas été déjà définie auparavant ?
oui
"Stephane Dupille" <sdupille+ a écrit dans le message news:
Chez moi ça marche : ~> for I in `grep -v "#" monfic | cut -d: -f4 `;do echo "$I" ; done; 10.0.0.1 10.0.0.2 10.0.0.3 Le fichier que j'ai donné est extrait.
sur un petite taille je n'ai pas le problème.
Quel est le shell utilisé ? Moi j'ai utilisé zsh, mais avec bash ça tourne aussi. csh m'envoie chier (il ne connait pas for). bash
Pour info, j'ai utilisé le gnu-cut sous linux, et j'ai également essayé avec le cut FreeBSD, qui marche bien également. j'ai utilisé un cut sous linux noyau 2.4 (redhat 8)
#cut --version cut (textutils) 2.0.21 crit par David Ihnat, David MacKenzie, and Jim Meyering. Copyright (C) 2002 Free Software Foundation, Inc. ...
Tu es sûr que la variable $I n'a pas été déjà définie auparavant ? oui
En changeant la variable, ça donne quoi ? idem.
Jo
Stephane CHAZELAS
Le Fri, 11 Jul 2003 13:26:45 +0200, Jo écrivait :
Je pense que si tu rajoutais "set -f" avant le for, tu verrais:
10.0.0.1 * 10.0.0.3
ok, quand je mets "set -f" avant le for çà marche.
Pourquoi ?
à quoi sert ce set -f ?
À désactiver la "filename generation".
echo *
affiche "*" après "set -f".
et a='*' echo $a echo `echo '*'`
aussi. Sur tous les shells excepté zsh, on devrait mettre « IFS=; set -f » en début de script pour éviter les surprises telles que celle que tu as eue, et mettre un "set +f" ou IFS=" " ponctuellement juste quand on veut utiliser le "word splitting" ou la "filename generation".
-- Stéphane
Le Fri, 11 Jul 2003 13:26:45 +0200, Jo <Jo@PADYMEL.COM> écrivait :
Je pense que si tu rajoutais "set -f" avant le for, tu verrais:
10.0.0.1
*
10.0.0.3
ok, quand je mets "set -f" avant le for çà marche.
Pourquoi ?
à quoi sert ce set -f ?
À désactiver la "filename generation".
echo *
affiche "*" après "set -f".
et
a='*'
echo $a
echo `echo '*'`
aussi. Sur tous les shells excepté zsh, on devrait mettre
« IFS=; set -f » en début de script pour éviter les surprises
telles que celle que tu as eue, et mettre un "set +f" ou IFS=" "
ponctuellement juste quand on veut utiliser le "word splitting"
ou la "filename generation".
Je pense que si tu rajoutais "set -f" avant le for, tu verrais:
10.0.0.1 * 10.0.0.3
ok, quand je mets "set -f" avant le for çà marche.
Pourquoi ?
à quoi sert ce set -f ?
À désactiver la "filename generation".
echo *
affiche "*" après "set -f".
et a='*' echo $a echo `echo '*'`
aussi. Sur tous les shells excepté zsh, on devrait mettre « IFS=; set -f » en début de script pour éviter les surprises telles que celle que tu as eue, et mettre un "set +f" ou IFS=" " ponctuellement juste quand on veut utiliser le "word splitting" ou la "filename generation".
-- Stéphane
Stephane Dupille
ok, quand je mets "set -f" avant le for çà marche. Pourquoi ?
No se, il faudrait l'extrait de la ligne qui foire pour comprendre. Si j'arrivais à reproduire je pourrais peut-être trouver une explication, mais là...
à quoi sert ce set -f ?
Extrait de « help set » sous bash : -f Disable file name generation (globbing).
-- MS> A quand une hiérachie alternative en langue française?? SP> Quand vous aurez lancé les messages de contrôle idoines. MS> Je les connais pas ? Peut-tu les publié ici même? -+- MS in GNU : Mon neuneu est un aaaaartiste -+-
ok, quand je mets "set -f" avant le for çà marche.
Pourquoi ?
No se, il faudrait l'extrait de la ligne qui foire pour comprendre.
Si j'arrivais à reproduire je pourrais peut-être trouver une
explication, mais là...
à quoi sert ce set -f ?
Extrait de « help set » sous bash :
-f Disable file name generation (globbing).
--
MS> A quand une hiérachie alternative en langue française??
SP> Quand vous aurez lancé les messages de contrôle idoines.
MS> Je les connais pas ? Peut-tu les publié ici même?
-+- MS in GNU : Mon neuneu est un aaaaartiste -+-
ok, quand je mets "set -f" avant le for çà marche. Pourquoi ?
No se, il faudrait l'extrait de la ligne qui foire pour comprendre. Si j'arrivais à reproduire je pourrais peut-être trouver une explication, mais là...
à quoi sert ce set -f ?
Extrait de « help set » sous bash : -f Disable file name generation (globbing).
-- MS> A quand une hiérachie alternative en langue française?? SP> Quand vous aurez lancé les messages de contrôle idoines. MS> Je les connais pas ? Peut-tu les publié ici même? -+- MS in GNU : Mon neuneu est un aaaaartiste -+-