Je fais encore appel à la qualité des contributeurs du ng pour tirer au
clair une bizarrerie de grep (bash/linux)
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un
coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer
par "echo ".
Pour vérifier que tout s'est bien passé j'ai fait des diffs, mais j'ai
aussi lancé la commande 'grep -C 1 -n -e "echo -e" *', pour vérifier...
Là je me suis aperçu que je n'avais pas pensé au "echo -en" (50
occurences). Pas grave.
Par contre, j'ai encore un fichier qui matche:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
JPFixeMount~-22-
JPFixeMount~:23:echo -e ${GREEN} "Type in the ${YELLOW}$TheOuinOuin <cut>
JPFixeMount~-24-read Reponse
8<-----------8<---------8<----------8<----------8<----------8<----------8<
Et la ligne 23 du script JPFixeMount est:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
echo -n ${GREEN} "Type in the ${YELLOW}$TheOuinOuinBordel${GREEN} <cut>
8<-----------8<---------8<----------8<----------8<----------8<----------8<
Encore plus bizarre, si j'édite le script et que je supprime la ligne 22
qui était vide, alors le grep ne matche plus (ne provoque plus d'erreur).
Qu'y avait-il dans mion fichier qui "trompait" grep ?
On ne voyait rien sous vim.
Je me demande si le problème n'est pas du au fait que je mets de la
couleur dans mes scripts. Il commencent tous par:
8<-----------8<---------8<----------8<----------8<----------8<----------8<
#!/bin/sh
# The doc is http://people.via.ecp.fr/~alexis/formation-linux/samba.html
TheOuinOuinBordel="Fixe"
Et j'utilise les variables ${GREEN} ${YELLOW}, etc... pour colorier la
sortie sur l'écran.
Merci de vos éclaircissements.
PS: mes scripts sont là : <http://www.roulaize.fr/scripts_bash/>
--
<HTML> <P><BR>peut-on acceder avec xterm sous windows à linux
en tant qu'utilisateur root, ou avec un utilisateur différent
qui a les mêmes droits
-+- FML in Guide du linuxien pervers : "Bien configurer son article"
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Izac
Bonjour,
le 16/05/2007 à 21:15, Hugolino a écrit dans le message :
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer par "echo ". Pour vérifier que tout s'est bien passé j'ai fait des diffs, mais j'ai aussi lancé la commande 'grep -C 1 -n -e "echo -e" *', pour vérifier...
Là je me suis aperçu que je n'avais pas pensé au "echo -en" (50 occurences). Pas grave.
Tu n'as pas pensé non plus au « echo -ne » ou « echo -n -e ». Je me suis permis un wget -r sur ton répertoire, j'en compte 1859 (je compte aussi les lignes commentés) :
#!/usr/bin/perl use warnings; use strict;
for my $file (<scripts_bash/*>) { open(my $fh, $file) or die "can't open $file: $!"; while (<$fh>) { if (/bechos+(-.*$)/) { if ($1 =~ /^(-[En]*?e?s+)*-[En]*?e/) { print "$file:$.: $_"; } } } close $fh; } __END__
C'est loin d'être parfait car par exemple « $echo -e » va être affiché et ça ne traite pas toutes les possibilités : « echo -e » sans rien derrière ne sera pas affiché.
Note que POSIX ne défini pas d'argument pour echo donc « -n » n'est pas portable.
-- Benoit Izac
Bonjour,
le 16/05/2007 à 21:15, Hugolino <hugolino@free.fr> a écrit dans le
message <slrnf4mm29.sbg.hugolino@Deborah.Rock-n-Roll.org> :
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un
coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer
par "echo ".
Pour vérifier que tout s'est bien passé j'ai fait des diffs, mais j'ai
aussi lancé la commande 'grep -C 1 -n -e "echo -e" *', pour vérifier...
Là je me suis aperçu que je n'avais pas pensé au "echo -en" (50
occurences). Pas grave.
Tu n'as pas pensé non plus au « echo -ne » ou « echo -n -e ». Je me suis
permis un wget -r sur ton répertoire, j'en compte 1859 (je compte aussi
les lignes commentés) :
#!/usr/bin/perl
use warnings;
use strict;
for my $file (<scripts_bash/*>) {
open(my $fh, $file) or die "can't open $file: $!";
while (<$fh>) {
if (/bechos+(-.*$)/) {
if ($1 =~ /^(-[En]*\?e?s+)*-[En]*\?e/) {
print "$file:$.: $_";
}
}
}
close $fh;
}
__END__
C'est loin d'être parfait car par exemple « $echo -e » va être affiché
et ça ne traite pas toutes les possibilités : « echo -e » sans rien
derrière ne sera pas affiché.
Note que POSIX ne défini pas d'argument pour echo donc « -n » n'est pas
portable.
le 16/05/2007 à 21:15, Hugolino a écrit dans le message :
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer par "echo ". Pour vérifier que tout s'est bien passé j'ai fait des diffs, mais j'ai aussi lancé la commande 'grep -C 1 -n -e "echo -e" *', pour vérifier...
Là je me suis aperçu que je n'avais pas pensé au "echo -en" (50 occurences). Pas grave.
Tu n'as pas pensé non plus au « echo -ne » ou « echo -n -e ». Je me suis permis un wget -r sur ton répertoire, j'en compte 1859 (je compte aussi les lignes commentés) :
#!/usr/bin/perl use warnings; use strict;
for my $file (<scripts_bash/*>) { open(my $fh, $file) or die "can't open $file: $!"; while (<$fh>) { if (/bechos+(-.*$)/) { if ($1 =~ /^(-[En]*?e?s+)*-[En]*?e/) { print "$file:$.: $_"; } } } close $fh; } __END__
C'est loin d'être parfait car par exemple « $echo -e » va être affiché et ça ne traite pas toutes les possibilités : « echo -e » sans rien derrière ne sera pas affiché.
Note que POSIX ne défini pas d'argument pour echo donc « -n » n'est pas portable.
-- Benoit Izac
Pascal Bourguignon
Hugolino writes:
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer par "echo ".
Ce serait meilleur de les remplacer par printf(1).
Qu'y avait-il dans mion fichier qui "trompait" grep ? On ne voyait rien sous vim.
Essayer avec od(1) sur l'ancien fichier; il y a peut être un ^H...
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.
Hugolino <hugolino@free.fr> writes:
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un
coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer
par "echo ".
Ce serait meilleur de les remplacer par printf(1).
Qu'y avait-il dans mion fichier qui "trompait" grep ?
On ne voyait rien sous vim.
Essayer avec od(1) sur l'ancien fichier; il y a peut être un ^H...
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.
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer par "echo ".
Ce serait meilleur de les remplacer par printf(1).
Qu'y avait-il dans mion fichier qui "trompait" grep ? On ne voyait rien sous vim.
Essayer avec od(1) sur l'ancien fichier; il y a peut être un ^H...
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.