Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

Hors ligne