[shell] cat + export variables

Résolu
Bonjour,

je suis un grand débutant sous linux, je bloque sur un truc peut etre bête mais bon...

dans un script je defini des variables ex: nom prenom

echo quel est ton nom
read nom

echo quel est ton prenom
read prenom

cat /path/to/bonjour.txt > path/to/presentation.txt

j'ai un fichier bonjour.txt qui contient la ligne suivante :

bonjour je m'appelle $prenom $nom

cat n'exporte pas les variables, en revanche si je fais
echo "je m'appelle $prenom $nom" > /path/to/presentation.txt

$prenom et $nom sont remplacés par les valeurs définies par le read plus haut.

puis-je utiliser cat ou dois-je me débrouiller avec echo ?

Merci

4 réponses

  1. Contributeur
    hello
    $ cat a3
    bonjour $nom $prenom 
    il fait beau
    au revoir $prenom $nom 
    $ 
    $ nom=Bon
    $ prenom=Jean
    $ 
    $ eval "echo \"$(cat a3)\""
    bonjour Bon Jean 
    il fait beau
    au revoir Jean Bon 
    $ 
    1. je te remercie lamij20 pour cette explication.

      je voudrais en fait faire quelque chose d'un peu plus complexe que cela.

      je m'explique, dans mon exemple bonjour.txt est très basique et donc echo ou ta solution avec cat est tout a fait adaptée.

      mais en réalité, mon fichier bonjour.txt est un peu plus complexe, il fait une 30aine de lignes.

      si je dois taper tout le texte dans le script ça revient a faire un echo.

      donc l'idée était un bonjour.txt qui contient $nom $prenom à certain endroits, je définie mes variables dans mon script, je fais un cat vers un fichier de sortie ou j'aurais mes 30 lignes avec les bonnes valeur pour $nom $prenom

      donc j'ai essayé aussi avec une boucle while read ligne; echo $ligne >> presentation; done<bonjour

      mais ça fait la même chose qu'avec cat, les variables ne sont pas remplacées par leurs valeurs alors que si j'utilise echo sans faire de boucle ça fonctionne.

      j'espère que je suis suffisamment clair, et merci pour ton aide.
      1. Modérateur
        Salut,

        echo suffit

        Si tu veux avec cat tu peux faire comme ça

        ~ $ cat nomprenom.sh 
        #!/bin/bash 
        
        echo -n "Nom? " 
        read nom 
        echo -n "Prenom? " 
        read prenom 
        
        cat <<FIN > presentation.txt 
        Bonjour, je m'appelle $nom $prenom 
        FIN 
        
        ~ $ ./nomprenom.sh 
        Nom? AAA 
        Prenom? titi 
        
        ~ $ cat presentation.txt 
        Bonjour, je m'appelle AAA titi

        GNU/Linux:Linux is Not Ubuntu! Quel linux choisir ne veut pas dire votre Distribution préférée,
        106485010510997108