#1 Le 05/10/2018, à 21:13
- Ble
[Résolu] [Bash] Redirection String dans un fichier ne fonctionne pas
Bonsoir à tous,
Voilà je suis en train de réaliser un script d'installation et je dois à un moment donné créé un fichier de configuration et y insérer des "instructions" :
echo "#!/bin/bash
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]];
then echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01" >> /sbin/chkconfig
Lorsque j'exécute cette partie du script le terminal reste bloqué et ne renvoie aucune(s) erreur(s). Evidemment j'ai testé de redirigé vers un fichier dans mon /home mais là même problème.
J'ai également tenté de faire une redirection avec un autre texte avec succès. Ma question est : "Est-ce que bash n'interpréterait pas, par hasard, des commandes à l'intérieur de la chaîne ?" Je suis actuellement sous Ubuntu 18.04 LTS. Merci d'avance pour vos réponses.
Dernière modification par Ble (Le 06/10/2018, à 07:47)
Hors ligne
#2 Le 05/10/2018, à 21:52
- Watael
Re : [Résolu] [Bash] Redirection String dans un fichier ne fonctionne pas
salut,
la substitution de commande* est exécutée entre guillemets.
Or, tail ne sait pas quel fichier traiter car l'assignation de variable, elle, n'a pas été exécutée !
quand tu as des pavés comme ça à écrire dans un fichier , utilise cat et un here-doc :
cat <<'eof' >fichier
bla
bla $(commande)
bla
eof
tu noteras que le premier eof (c'est un mot arbitraire, tu peux mettre n'importe quoi pourvu que tu mettes le même à la fin) est entre apostrophes, cela indique de ne pas exécuter les substitutions de commande.
* il y a bien longtemps qu'on n'utilise plus cette forme;
on lui préfère celle-ci: $(commande).
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 06/10/2018, à 07:20
- Ble
Re : [Résolu] [Bash] Redirection String dans un fichier ne fonctionne pas
Hello,
Merci pour la rapidité de ta réponse, je n'y avais effectivement pas pensé.
J'ai donc modifié mon script comme suit :
cat << 'EOF' >> /home/$USER/Bureau/chkconfig
#!/bin/bash
file=/etc/init.d/oracle-xe
if [[ ! `tail -n1 $file | grep INIT` ]];
then echo >> $file
echo '### BEGIN INIT INFO' >> $file
echo '# Provides: OracleXE' >> $file
echo '# Required-Start: $remote_fs $syslog' >> $file
echo '# Required-Stop: $remote_fs $syslog' >> $file
echo '# Default-Start: 2 3 4 5' >> $file
echo '# Default-Stop: 0 1 6' >> $file
echo '# Short-Description: Oracle 11g Express Edition' >> $file
echo '### END INIT INFO' >> $file
fi
update-rc.d oracle-xe defaults 80 01
EOF
Mais le script ne détecte pas EOF et indique une fin de fichier prématuré correspondant à la fin de mon "vrai script" :
./script: ligne 127: avertissement : « here-document » à la ligne 12 délimité par la fin du fichier (au lieu de « EOF »)
./script: ligne 128: erreur de syntaxe : fin de fichier prématurée
Cela viendrait du fait que je n'ai pas écrit mes commandes avec les $() ?
Hors ligne
#4 Le 06/10/2018, à 07:43
- pingouinux
Re : [Résolu] [Bash] Redirection String dans un fichier ne fonctionne pas
Bonjour,
Le EOF qui termine le here-document doit être seul sur sa ligne, donc pas d'espace ni devant ni derrière.
Hors ligne
#5 Le 06/10/2018, à 07:47
- Ble
Re : [Résolu] [Bash] Redirection String dans un fichier ne fonctionne pas
Bonjour pingouinux,
Merci beaucoup à vous deux le problème est résolu
Hors ligne