Interprétation d'un /* et */ par un bash
agyh81
-
jipicy Messages postés 40842 Date d'inscription Statut Modérateur Dernière intervention -
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.
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:
- Interprétation d'un /* et */ par un bash
- Bingo bash - Télécharger - Divers Jeux
- Bash list ✓ - Forum Shell
- Bash permission non accordée - Forum Shell
- Bash pause ✓ - Forum Shell
- Bash addition - Forum Programmation
9 réponses
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 ;-)
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 ;-)
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.
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.
hello
mettre des " pour que le shell n'interprète pas * contenu dans ligne
ligneTronquee=`echo "$ligne" | cut -c1-100`
mettre des " pour que le shell n'interprète pas * contenu dans ligne
ligneTronquee=`echo "$ligne" | cut -c1-100`
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 ?
On peut avoir un bout d'un de tes fichiers histoire de tester ?
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 */
/* 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 */
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