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

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.
Configuration: Windows XP
Internet Explorer 7.0

9 réponses

  1. Modérateur
    Salut,

    A quel niveau le caractère est interprété, commande ? variable ?
    1. Modérateur
      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 ;-)
      1. 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.
    2. Contributeur
      hello
      mettre des " pour que le shell n'interprète pas * contenu dans ligne
      ligneTronquee=`echo "$ligne" | cut -c1-100`
      1. 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.
        1. Contributeur
          ne pas oublier celle ci
          Nombre_Caracteres=`echo $ligne | wc -c | tr -d ' '`
          1. Modérateur
            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 ?
            1. 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 */
              1. Modérateur
                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