Ecrire dans un fichier avec guillemets

Ecrire dans un fichier avec guillemets - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-04-2012 à 14:26:22    

Bonjour,
 
Dans le but d'automatiser la réinstallation de mon serveur je cherche à écrire dans le fichier .bashrc pour y ajouter les alias que j'ai crée et y ajouter la prise en charge des couleurs.
Mon problème est que ce fichier contient des guillemets. Et je me retrouve avec l'erreur: "Syntax error: Unterminated quoted string"
Donc comment faire pour écrire dans un fichier qui va contenir des guillemets?
 
A titre d’exemple, exécutez ce script chez vous:
 

Code :
  1. echo "# ~/.bashrc: executed by bash(1) for non-login shells.
  2. # Note: PS1 and umask are already set in /etc/profile. You should not
  3. # need this unless you want different defaults for root.
  4. # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
  5. # umask 022
  6. # You may uncomment the following lines if you want `ls' to be colorized:
  7. # export LS_OPTIONS='--color=auto'
  8. # eval "`dircolors`"
  9. alias ls='ls $LS_OPTIONS'
  10. alias ll='ls $LS_OPTIONS -l'
  11. alias l='ls $LS_OPTIONS -lA'
  12. #
  13. # Some more alias to avoid making mistakes:
  14. alias rm='rm -i'
  15. alias cp='cp -i'
  16. alias mv='mv -i'
  17. " > /tmp/scriptTest


 

Reply

Marsh Posté le 16-04-2012 à 14:26:22   

Reply

Marsh Posté le 16-04-2012 à 14:43:04    

Ça peut pas marcher, retour de ligne = <return> donc seule ta première ligne est prise en compte par echo.
 
Y'a pleins de solutions (genre échapper les retours à la ligne), mais le mieux dans ce cas c'est la syntaxe heredoc : http://forum.hardware.fr/hfr/OSAlt [...] m#t1274817


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

Marsh Posté le 16-04-2012 à 18:56:55    

Merci pour ton lien, c'est éxactememnt ce que je cherchais.

Reply

Marsh Posté le 17-04-2012 à 17:10:02    

High Plains Drifter a écrit :

Ça peut pas marcher, retour de ligne = <return> donc seule ta première ligne est prise en compte par echo.


 
euh non... vu qu'il a ouvert des guillemets juste après le echo, tant qu'aucun guillemet n'apparaît la commande ne sera pas terminée, et il peux mettre tous les retours a la ligne qu'il veux.
 
Pour le problème énoncé donc, il suffit juste "d'échapper" les guillemets avec un \
 
le  

Code :
  1. # eval "`dircolors`"


devient

Code :
  1. # eval \"`dircolors`\"


 
 
Après il faut aussi penser a protéger tous les autres caractères spéciaux comme le $ ou les `

Reply

Marsh Posté le 17-04-2012 à 17:49:58    

J'ai finalement trouvé une solution parfaite:

Code :
  1. cat > .bashrc <<"EOF"
  2. # ~/.bashrc: executed by bash(1) for non-login shells.
  3. # Note: PS1 and umask are already set in /etc/profile. You should not
  4. # need this unless you want different defaults for root.
  5. # PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ '
  6. # umask 022
  7. # You may uncomment the following lines if you want `ls' to be colorized:
  8. export LS_OPTIONS='--color=auto'
  9. eval "`dircolors`"
  10. alias ls='ls $LS_OPTIONS'
  11. alias ll='ls $LS_OPTIONS -l'
  12. alias l='ls $LS_OPTIONS -lA'
  13. #
  14. # Some more alias to avoid making mistakes:
  15. alias rm='rm -i'
  16. alias cp='cp -i'
  17. alias mv='mv -i'
  18. alias Temperature='hddtemp /dev/sda && hddtemp /dev/sdb'
  19. EOF

Reply

Sujets relatifs:

Leave a Replay

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