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

agyh81 -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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   Statut Modérateur Dernière intervention   4 896
 
Salut,

A quel niveau le caractère est interprété, commande ? variable ?
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
agyh81
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
mettre des " pour que le shell n'interprète pas * contenu dans ligne
ligneTronquee=`echo "$ligne" | cut -c1-100`
0
agyh81
 
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
ne pas oublier celle ci
Nombre_Caracteres=`echo $ligne | wc -c | tr -d ' '`
0
agyh81
 
Tout à fait, je les ai tous mis entre guillemets.
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
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
agyh81
 
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   Statut Modérateur Dernière intervention   4 896
 
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