Interprétation d'un /* et */ par un bash

Fermé
agyh81 - 12 sept. 2008 à 13:18
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 12 sept. 2008 à 19:33
Bonjour,
J'aurais un petit problème avec la programmation bash.
En fait, je développe un script qui traite des fichiers .c .cpp ... et pour chacun d'eux il liste (dans un log) les lignes qui ont plus de 100 caractères et les édite tronqués au 100ème caractère.
Le problème est que dans certains fichiers , les commentaire sont de cette forme /* */
J'ai l'impression que le shell interprète /* comme un: ls -d /*
et du coup lors que la ligne est tronquée, j'ai ceci :
ligne 3: /bin /cygwin.bat /cygwin.ico /etc /home /lib /tmp /usr /var this ALWAYS GENERATE ...
Alors que cette ligne est en réalité :
ligne 3: /* this ALWAYS GENERATE ...
Comment est ce que je pourrais faire pourque le shell accepte /* et */ sans les interprèter ..
Je vous remercie à l'avance pour votre aide précieuse.
A voir également:

9 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 sept. 2008 à 13:29
Salut,

A quel niveau le caractère est interprété, commande ? variable ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
12 sept. 2008 à 13:33
Salut,

tu peux utiliser les apostrophes simples ou mettre un backslash avant les caractères
encore mieux sera de nous montrer ton script ou la partie concernée ;-)
0
Salut,
Je vous remercie pour vos réponses.
Voici la partie du script concerné:

#$1:le fichier concerné
cat $1 | while read ligne
do
i=$(expr $i + 1)
#Nombres de caractères de la ligne courante ET suppression des vides
Nombre_Caracteres=`echo $ligne | wc -c | tr -d ' '`
test=$Nombre_Caracteres
if [ "$test" -gt 100 ]
then
#On récupère la ligne correspondante tronquée au 100ème caractères.
ligneTronquee=`echo $ligne | cut -c1-100`
message=`echo -e "ligne $i: $ligneTronquee ... "`
echo $message >> $Log
fi
done

Merci d'avance.
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
12 sept. 2008 à 15:23
hello
mettre des " pour que le shell n'interprète pas * contenu dans ligne
ligneTronquee=`echo "$ligne" | cut -c1-100`
0
merci pour la réponse,
En fait, j'ai essayé ligneTronquee=`echo "$ligne" | cut -c1-100` mais ça fonctionne dans certains cas et ne fonctionne pas dans d'autres cas (J'ai encore cette interprétation du /*)
De plus , j'ai l'impression qu'il interpréte les * dans certaines séquences du genre "char * pTyPr" par exemple. par "01ReBuildAllUnmanaged.vbs 02ReBuildAllTech.vbs 03ReBuildAllBeans.vbs 04ReBuildConversion.vbs 05ReBuildAllAppliCaprice.vbs 06ReBuildAllAppliJazz.vbs...." ...
Et même les ' ' ne fonctionnent pas.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
12 sept. 2008 à 15:46
ne pas oublier celle ci
Nombre_Caracteres=`echo $ligne | wc -c | tr -d ' '`
0
Tout à fait, je les ai tous mis entre guillemets.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 sept. 2008 à 16:04
Je crois que ça dépend aussi de la version de bash et des options activées/désactivées de celui-ci (je pense à shopt et ses *glob") ;-\

On peut avoir un bout d'un de tes fichiers histoire de tester ?
0
voici un bout de code :

/* Détermine si un visuel peut rester ouvert à l'apparition d'un nouveau visuel*/
virtual bool PeutResterOuverte(int id_nouveau_visuel);
/* Précise les éléments de disposition des visuels*/
/* debut Test de la CB */
void CCB::RemplirListeCB(char *pTypPr);
void CCB::RemplirListeFact(void);
/* void ChargeListeFacturationModA(long pNoPrPCM, char * pTyPr);*/ /* GGRZ */
long ChargeListeFacturationModP(long pNoPrPCM, char * pTyPr);
void CCarteBleue::SetFlecheTri(void);
void CCarteBleue::BasculeModA(void);
/* debut Test de la CB */
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
12 sept. 2008 à 19:33
Tiens tu peux essayer ça :
#set -xv

#$1:le fichier concerné
sed 's|\*|\\\*|g' < "$1" | while read ligne
do
i=$(expr $i + 1)
#Nombres de caractères de la ligne courante ET suppression des vides
Nombre_Caracteres=`echo "$ligne" | wc -c | tr -d ' '`
test="$Nombre_Caracteres"
if [ "$test" -gt 100 ]
then
#On récupère la ligne correspondante tronquée au 100ème caractères.
ligneTronquee=`echo "$ligne" | cut -c1-100`
message=`echo -e "ligne $i: $ligneTronquee ... "`
echo "$message" >> Log
fi
done
0