[Résolu] Bash - Exporter sans interpréter.

Bash - Exporter sans interpréter. [Résolu] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 19-04-2011 à 14:59:35    

Bonjour.
 
Voila, je suis en train de réaliser un script en Bash.
Après avoir poser plusieurs questions à l'utilisateur, il génère plusieurs autres scripts. Le soucsi est que je n'arrive pas à dire à echo de ne pas interpréter son contenu. Voici un exemple de mon code :  

Code :
  1. echo "#!/bin/bash
  2.   echo "Les images provenant d'une éventuelle éxécution de ce script sont effacés."
  3.   find ./images/ -name *.comp.* -delete
  4.   echo "Les images potentiellement sauvegardées sont restituées."
  5.   for file in $(find ./images/ -name *.bak.*)
  6.   do
  7.     newfile=$(echo $file | sed -e "s/.bak//g" )
  8.     mv $file $newfile
  9.   done
  10. " > toto.sh


Si quelqu'un à une idée, je suis plus que preneur.
 
Merci.


Message édité par jcdc le 19-04-2011 à 23:06:22
Reply

Marsh Posté le 19-04-2011 à 14:59:35   

Reply

Marsh Posté le 19-04-2011 à 15:17:00    

je ferai ça moi plutôt (je sais, c'est pas beau) :
 

Code :
  1. echo -E '#!/bin/bash' > toto.sh
  2. echo -E "echo 'Les images provenant d'une éventuelle éxécution de ce script sont effacés.'" >> toto.sh
  3. echo -E "find ./images/ -name *.comp.* -delete" >> toto.sh
  4. echo -E "echo 'Les images potentiellement sauvegardées sont restituées.'" >> toto.sh
  5. echo -E 'for file in $(find ./images/ -name *.bak.*)' >> toto.sh
  6. echo -E "do" >> toto.sh
  7. echo -E '    newfile=$(echo $file | sed -e "s/.bak//g" )' >> toto.sh
  8. echo -E '    mv $file $newfile' >> toto.sh
  9. echo -E "done" >> toto.sh

Reply

Marsh Posté le 19-04-2011 à 15:32:18    

Merci pour ton idée. Je vais je pense commencer par ça en attendant de trouver la raison de mon soucis. Marre de tourner en rond.

Reply

Marsh Posté le 19-04-2011 à 18:10:17    

Citation :

echo "#!/bin/bash
echo "


En gros tu l'ouvres et tu la fermes :whistle:  
 
Remplace donc ton premier " par un '
Et le dernier " par un '
 
Sinon, remplace tous les sauts de ligne par des ; et en mettant tout sur une seule ligne dans ton code.


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 19-04-2011 à 19:02:43    

Généralement quand on fait ce genre de truc on utilise plutôt la syntaxe heredoc :
 


> toto.sh << "SCRIPTEND"
#!/bin/bash
echo "Les images provenant d'une éventuelle éxécution de ce script sont effacés."
find ./images/ -name *.comp.* -delete
echo "Les images potentiellement sauvegardées sont restituées."
for file in $(find ./images/ -name *.bak.*)
do
        newfile=$(echo $file | sed -e "s/.bak//g" )
        mv $file $newfile
done
SCRIPTEND


 
Et pour en revenir au sujet du topic et contrairement au comportement habituel de bash, en heredoc les doubles guillemets autour de "SCRIPTEND" dans cet exemple servent désactiver la substitution des variables.


Message édité par High Plains Drifter le 19-04-2011 à 19:20:38

---------------
| < Ceci n'est pas une pipe.
Reply

Marsh Posté le 19-04-2011 à 19:53:10    

Cool, je viens de découvrir un truc là  :)  
 
Merci High Plains Drifter de partager ton savoir avec nous  :jap:

Reply

Marsh Posté le 19-04-2011 à 23:05:47    

Et ça marche parfaitement chez moi. Merci beaucoup.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed