IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

insérer la sortie d'une commande dans un fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut insérer la sortie d'une commande dans un fichier
    Bonjour

    J'ai un problème : je souhaite insérer du texte dans un fichier après l'avoir récupéré dans ce même fichier. Même en essayant de mettre ma variable entre $(), ça ne fonctionne pas.

    Je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #Pour chaque fichier
    for i in `find . -name "*.txt"`; do
        #je recupere chaque ligne qui commence par function
        begin=$(awk 'BEGIN {  }
    		/function/ { print $0 }
        ' $i)
     
        #pour chaque ligne dans $begin
        for fct in $begin; do
                  #recuperer les noms des fonctions
    	      nom=$(echo $fct | cut -d " " -f 2 | cut -d "(" -f 1)
     
                  #recuperer les parametres des fonctions		
    	      var=$(echo $fct | cut -d " " -f 2 | cut -d "(" -f 2 | cut -d ")" -f 1)
     
                  #recuperer chaque mot avant une virgule
                  var2=$(echo $var | sed 's/,/ /g')
        done
     
        #on insère  le nom de la fonction : j'ai essayé simples quotes, doubles quotes, $(), et mélanges aussi....... rien n'y fait soit ça met rien soit ça met $nom au lieu de la valeur qu'elle contient
        cat $i | sed '/^function/ i\ \n\/**\n* function $(nom) : ' > $i
    Comment je peux faire pour insérer le contenu de ma variable dans mon fichier ?

    Je suis bloquée depuis des jours :s

    Cordialement

    Ginger

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Pour ajouter du contenu à un fichier existant il faut doubler les chevrons: ">>" au lieu de ">".
    Le chevron simple écrase le fichier existant avant d'écrire.

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    bonjour ginger,

    contrairement à ce que tu sembles croire for ne lis pas les données ligne à ligne, mais élément par élément. En conséquence, en général, on évite for i in `cmd`, car ça donne rarement ce qu'on veut.

    idem pour for fct in $begin, cela va itérer à travers tous les éléments de $begin, mais ne pas lire ligne à ligne !

    -
    plutôt que des cut pipés, utilise sed.

    -
    si tu poses ta question ici, c'est que tu utilises GNU/linux, et donc GNU sed, alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i.old "/^function/ i\ \n\/**\n* function $(nom) : " $i
    ce qui va insérer la valeur de $nom à chaque ligne qui commence par function.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Bonjour

    Merci pour vos réponses

    Nudger si je mets deux chevrons, mon fichier devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    /**
    mes commentaires
    */
    function truc(p1,p2){
        //contenu
    }
     
    /**
    mes commentaires
    */
    function chose(){
        //contenu
    }
     
     
    function truc(p1,p2){
        //contenu
    }
     
    function chose(){
        //contenu
    }
    au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    /**
    mes commentaires
    */
    function truc(p1,p2){
        //contenu
    }
     
    /**
    mes commentaires
    */
    function chose(){
        //contenu
    }
    Mais merci de la précision je ne savais pas


    N_BaH j'ai utilisé ton code sed, j'ai une erreur me disant
    zsh: command not found: nom

    Du coup j'ai essayé sans le $(), avec des ``, etc... c'est toujours pareil, donc j'ai essayé de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat $i | sed -i.old "/^function/ i\ \n\/**\n* function "$nom" : " $i
    La ca n'affiche plus d'erreur mais insere ceci dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /**
    * function ?^??^?? :
    function truc(p1,p2){
        //contenu
    }
    La j'ai vu que mes points de concaténation n'en étaient pas donc j'ai corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat $i | sed -i.old "/^function/ i\ \n\/**\n* function ".$nom." : " $i
    Et là j'ai cette erreur :
    sed: -e expression n°1, caractère 46: caractères inutiles après la commande

    Comment faire une concaténation en sed si c'est ça la solution ?

    Cordialement,
    Ginger

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : IS Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Citation Envoyé par ginger4957 Voir le message
    N_BaH j'ai utilisé ton code sed, j'ai une erreur me disant
    zsh: command not found: nom
    T'as mis le shebang pour Bash dans ton script ? #!/bin/bash ?
    Pour des scripts vaut mieux quelque chose de "standard" comme Bash, Sh ou encore Ksh.

    Cordialement,
    Idriss

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Dans mon script j'ai mis cette ligne au tout début :

    Mais je teste en copiant directement le bout de code que j'ai mis dans mon premier post. J'ai donc essayé de tester pareillement avec en plus ce bout de code, mais ça donne la même chose.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    ce n'est pas mon code, j'ai copié/collé sans relire ce que tu avais écrit, sans uuoc, et avec l'option -i, pour faire une sauvegarde du fichier original.

    J'ai un peu de mal à comprendre le but de ton script : il ne s'agit que d'ajouter les "balises" de commentaires avant chaque fonction ?
    un avant-après d'un fichier exemple ne serait pas inutile pour comprendre ce que tu souhaites faire...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Oui c'est exactement ça, et même un peu plus :

    fichier de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function truc(p1,p2){
        //contenu
    }
     
    //autre code.....
     
    function chose(){
        //contenu
    }
     
    //blabla.....
    fichier d'arrivée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    /**
    function truc : 
    @param p1 : 
    @param p2 : 
    mes commentaires
    */
    function truc(p1,p2){
        //contenu
    }
     
    //autre code.....
    /**
    function chose : 
    mes commentaires
    */
    function chose(){
        //contenu
    }
     
    //blabla.....
    Le plus, c'est que je voudrais aussi récupérer les parametres des fonctions pour les insérer en commentaires tels que mis dans le fichier d'arrivée. mais je n'en ai pas encore parlé car chaque chose en son temps...

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    bon, pour répondre à ta question initiale (parce que ce n'est pas corriger ton script qu'il faut faire mais le réécrire) :
    Code Exemple : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat myFile
    foo
    bar
    baz
    $ maVar=bla
    $ sed -i.bak "/^bar/i$maVar" myFile
    $ cat myFile
    foo
    bla
    bar
    baz
    $ ls
    myFile myFile.bak
    pour ton script, soit tu pars sur un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    find . -type f -name "*.txt" -exec bash -c '
    fichier="$1"
    recup_vars_dans "$fichier"
    sed...
    ' _  {} \;
    soit, si tu ne dois pas chercher dans les sous-répertoires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for fichier in *.txt
    do
       recup_vars_dans "$fichier"
       sed...
    done
    on pourrait utiliser cette dernière forme dans une fonction récursive pour descendre dans les sous-répertoires, mais KISS !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    J'ai trouvé cette ligne de code au gré des recherches :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #$line est chaque ligne du fichier
    while read line
    do
        par=$(sed 's#(.*##;s#.)##')
        echo $par
    done
    exemple de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $blabla;
     
    function truc(p1,p2,p3){
            //contenu
    }
     
    function gna(p1){
            //contenu
    }
    elle affiche ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $blabla;
     
    function truc
            //contenu
    }
     
    function gna
            //contenu
    }
    Je voudrais qu'elle affiche ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    truc(p1,p2,p3)
     
    gna(p1)

    Comme ca je pourrai traiter fonction par fonction et enfin pouvoir faire ce sur quoi je suis bloquée depuis 1 semaine

    Une idée de comment y parvenir ?

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    echo "function truc(p1,p2,p3){
            //contenu
    }
     
    function gna(p1){
            //contenu
    }" >fichierExemple
     
    sed  '/^function\|^$/! d;s/function \([^{]*\){/\1/' fichierExemple
    truc(p1,p2,p3)
     
    gna(p1)
    mais bon te donner ça sans que tu connaisses un peu sed ne peut pas t'aider réellement, voilà donc de la doc qu'il faut lire [...] pour comprendre l'univers de sed
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Bonjour

    Je crois comprendre pourquoi je n'arrive pas à insérer la valeur de ma variable... En fait au départ le définie ma variable comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nom=$(echo $begin | cut -d " " -f 2 | cut -d "(" -f 1)
    Et ensuite je cherche à insérer ce nom dans mon sed, comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat $i | sed 's/^function/\n\/**\n* function' $nom ' : \n* @param nomparam : \n* @return\n*\/\nfunction/' > $i
    Au départ j'ai testé ca pour voir si ca fonctionne (et ca marche bien) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat $i | sed 's/^function/\n\/**\n* function quelquechose : \n* @param nomparam : \n* @return\n*\/\nfunction/' > $i
    Mais en fait l'insertion de la variable ne fonctionne pas parce que je n'ai pas récupéré le nom en sed, mais par les pipes, donc il faut que je le fasse en sed je pense... J'ai donc fait à partir de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #ton code qui recupere truc(p1,p2) ....
    part1=$(sed '/^function\|^$/! d;s/function \([^{]*\){/\1/' $i)
    echo $part1
     
    #essai pour ne récupérer que truc
    part2=$(sed '/^function/\2/')
    Mais je n'arrive pas à récupérer le mot se trouvant après le mot "function"... Ca ne doit pas être si compliqué que ca pourtant ?

    J'ai affiché ma commande dans une variable pour voir ce que ca ecrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #commande
    aze="cat $i | sed 's/^function/\n\/**\n* function' $nom ' : \n* @param nomparam : \n* @return\n*\/\nfunction/' > $i"
    echo $aze
     
    #ce que ca renvoit
    cat ./fichier.txt | sed 's/^function/
    \/**
    * function' hey
    truc
    gna ' : 
    * @param nomparam : 
    * @return
    *\/
    function/' > ./fichier.txt
    Cordialement,

    Ginger

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Bonjour

    J'ai réussi à insérer les noms des fonctions correctement, et presque pour les parametres.

    Mon fichier de depart :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    function hey(){
       //contenu
    }
     
    $blabla;
     
    function truc(p1,p2,p3){
            //contenu
    }
     
    function gna(p1){
            //contenu
    }
    j'arrive a transformer le fichier comme suis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    /**
     * function hey :
     * @param p1 : 
     * @param p2 : 
     * @param p3 : 
     * @param p1 : 
     * @return
     */
    function hey(){
       //contenu
    }
     
    $blabla;
     
     
    /**
     * function truc :
     * @param p1 : 
     * @param p2 : 
     * @param p3 : 
     * @param p1 : 
     * @return
     */
    function truc(p1,p2,p3){
            //contenu
    }
     
     
    /**
     * function gna :
     * @param p1 : 
     * @param p2 : 
     * @param p3 : 
     * @param p1 : 
     * @return
     */
    function gna(p1){
            //contenu
    }
    Le fichier que je dois obtenir au final (il s'agit d'insérer les bons parametres aux bons endroits) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    /**
     * function hey :
     * @return
     */
    function hey(){
       //contenu
    }
     
    $blabla;
     
     
    /**
     * function truc :
     * @param p1 : 
     * @param p2 : 
     * @param p3 : 
     * @return
     */
    function truc(p1,p2,p3){
            //contenu
    }
     
     
    /**
     * function gna :
     * @param p1 : 
     * @return
     */
    function gna(p1){
            //contenu
    }
    Le résultat que j'obtiens à présent je l'obtiens avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    #!/bin/sh
     
    for i in `find . -name "*.txt"`; do
     
    	# affiche les fins de commentaires spéciaux trouvés
    	reg=`
        awk 'BEGIN {  }
        	/* @return \n *\// { print $0 }
            ' $i
       	`
     
    #	echo $reg
     
    	# test si on a deja mis un commentaire grace à /**
    	if [ ! $reg ]
    	then
    		nomf=`
    		awk 'BEGIN {  }
    			/^function/ { ligne=$0 ; 
    			sub(/function /,"") ; 
    			gsub(/ /,"") ; 
    			split($0,tab, /\(/) ; 
    			print "tab1 : " tab[1]
    			}
    		' $i
    		`
     
    		echo "noms des fonctions : " $nomf
     
    		parf=`
    		awk 'BEGIN {  }
    			/^function/ { ligne=$0 ; 
    			sub(/function /,"") ; 
    			gsub(/ /,"") ; 
    			split($0,tab, /\(/) ; 
    			# print "tab2 : " tab[2] ; 
    			params=substr(tab[2],0,length(tab[2])-2) ; 
    			split(params,tabParams,/\,/) ; 
    			for (indice in tabParams){
       	            print tabParams[indice]
            	} ; 
            	# print "ligne : " $ligne
            }
    		' $i
    		`
     
    		echo "parametres des fonctions : " $parf
     
    		for j in $nomf; do
     
    			cat $i | sed "s/^function* ${j}/\n\/**\n * function ${j} : \n * @return\n *\/\nfunction ${j}/g" > $i
     
    		done
     
    		for k in $parf; do
     
    			cat $i | sed "s/@return/@param ${k} : \n * @return/g" > $i
     
    		done
     
    	fi
     
    done
    Quelqu'un aurait il une idée ?

    Cordialement,
    Ginger

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    Bonjour,

    Te rends-tu compte que le même fichier est lu 5 fois au cours de ton script ?

    un simple boucle while read line; do...; done <fichierdevrait te permettre de faire ce que tu veux...
    oublie awk et sed (pour l'instant).

    si "$line" commence par "function", alors tu découpes la ligne pour récupérer les éléments qui t'intéressent
    tu envoies le résultat dans un fichier temporaire
    tu envoies la ligne dans le même fichier temporaire
    si "$line" ne correspond pas, alors tu l'envoies dans le fichier temporaire
    ...

    mais il ne devrait même pas y avoir autant d'écritures, en fait, tu ne feras que des echo, et à la fin de la boucle while tu enverras tout dans un fichier temporaire, avant d'écraser l'original.

    ET, je te le dis encore une fois, on ne fait pas for item in `commande` !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Bonjour

    Merci pour ta réponse, j'ai modifié le for item in `cmd` en ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    fichier=`find . -name "*.txt"`
    while read line; do
            #... traitement ...
    done
    Et je suis en train de voir pour la suite. A bientot




    Ginger

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Bonjour

    Je cherche à parser en shell ou awk ou autre, ce genre de texte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function hey(){- p3){- function gna(p1){-
    Je cherche à recuperer chaque partie qui se trouve avant le symbole "-" je ne trouve pas de solution...

    Une petite idée ?

  17. #17
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    bonjour,

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ string="function hey(){- p3){- function gna(p1){-"
    $ IFS='-' read -r -a array <<<"$string"
    $ printf '%s\n' "${array[@]# }"
    function hey(){
    p3){
    function gna(p1){
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Merci N_BaH

    Quelle est la différence entre :
    et :

    ? Ca affiche la même chose... A quoi sert le dièse ?

    Sinon ça affiche pas tout le résultat mais seulement le premier... :

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 684
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 684
    Par défaut
    ah t'es en /bin/sh
    il faudrait utiliser au minimum bash, pour pouvoir utiliser des tableaux/listes.

    le # (#<espace>)est censé supprimer l'espace qui apparaît au début des valeurs.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 107
    Par défaut
    Merci pour l'explication

    Je viens de tester mon code dans un fichier bash au lieu de sh mais ca change rien, je ne recupere que le premier resultat "function hey(){"

    Tu es sûr que je ne peux pas utiliser de tableaux en sh ?


    EDIT

    J'ai une question : quand je veux supprimer un fichier directement en ligne de commande sous la console et que je le recréé après via mon_fichier.sh, ça fonctionne bien ; mais quand j'écris cette commande dans un fichier ça fait quelque chose de bizarre. Je m'explique :
    Dans le premier cas, si je supprime sous la console le fichier temp.txt, comme ceci :
    ça me le supprime, et quand je le recréé via mon_fichier.sh (que je lance donc sous la console) j'y écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function
    hey(){-
    p3){-
    function
    gna(p1){-
    Ca, ça marche bien ;

    Mais

    quand je tente de supprimer temp.txt directement via mon_fichier.sh, et que ensuite je le recréé ça écrit ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    hey(){--
    p3){--
    gna(p1){--
    Dans mon_fichier.sh, j'ai ecrit ceci afin de supprimer temp.txt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if [[ `find "temp.txt"` ]]
    then
    	`rm temp.txt`
    fi
     
    > temp.txt
    # cest pareil si je fais touch temp.txt
     
     
    `chmod 777 temp.txt`
     
    echo ${montexte} > temp.txt
    Si je fais juste la suppression et que je mets la creation et lecriture en commentaire, que temp.txt existe, ca le supprime bien, et si j'enleve les commentaires et que je relance encore une fois mon_fichier.sh, ca cree le texte correctement, et si je relance encore une fois mon_fichier.sh ca n'ecrit pas ce quil faut dans temp.txt... Ca marche que la premiere fois en fait...

    Puis je le recréé comme ceci (toujours dans mon_fichier.sh) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo ${var} >> temp.txt
    # $var etant le texte que j'écris dans temp.txt
    Du coup je suppose que ce n'est pas la bonne syntaxe lors de la suppression de temp.txt ? Mais comment trouver la bonne ?

Discussions similaires

  1. Récupérer la sortie d'une commande dans page html
    Par shell13010 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 19/04/2010, 18h13
  2. Réponses: 2
    Dernier message: 02/04/2009, 12h29
  3. Problème avec une commande dans un fichier .sh
    Par ploxien dans le forum Réseau
    Réponses: 8
    Dernier message: 19/03/2008, 11h55
  4. Copier le resultat d'une commande dans un fichier
    Par Cliff dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 01/02/2007, 16h28
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 11h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo