Sortie de fichier problème

Bonjour,

echo -v '#!/bin/sh' > $MA_VAR1/$MA_VAR2/dossier/testrs.sh echo -v '' >> $MA_VAR1/$MA_VAR2/dossier/testrs.sh echo -v "# Variables" >> $MA_VAR1/$MA_VAR2/dossier/testrs.sh

Ce code est exécuté à partir d’un bash, le problème est que dans la sortie du testrs.sh, j’ai -v qui s’affiche partout…

Auriez-vous une idée ?

Cordialement

echo [-neE] [arguments ...] Affiche les arguments, séparés par des espaces, suivis par un saut de ligne. La valeur renvoyée est toujours 0. Si -n est indiqué, le saut de ligne final est supprimé. Si l'option -e est indiquée, l'interprétation des caractères suivants d'échappement par une contre-oblique est activée. L'option -E désactive l'interprétation de ces caractères d'échappement, même sur les systèmes où ils sont interprétés par défaut. L'option d'interpréteur xpg_echo peut être utilisée dynamiquement pour déterminer si echo développe ou non par défaut ces caractères d'échappement. echo n'interprète pas -- comme signifiant la fin des options. echo reconnaît les suites de caractères d'échappement suivantes : \a alerte (alarme) ; \b effacement arrière (« backspace ») ; \c supprime tout affichage suivant ; \e caractère d'échappement ; \f saut de page (« form feed ») ; \n saut de ligne (« new line ») ; \r retour chariot (« carriage return ») ; \t tabulation horizontale ; \v tabulation verticale ; \\ contre-oblique ; \0nnn le caractère 8 bits dont la valeur en octal est nnn (zéro à trois chiffres octaux) ; \xHH le caractère 8 bits dont la valeur hexadécimale est HH (un ou deux chiffres hexadécimaux) ;

Le man de bash n’indique pas d’options -v pour echo (note que c’est la raison qui fait qu’il l’affiche tout ce qui n’est pas une option est à afficher pour lui). Tu cherche à faire quoi ?

Si ton objectif était d’afficher simultanément sur la sortie standard et dans un fichier, il suffit de faire :

echo '#!/bin/sh' | tee $MA_VAR1/$MA_VAR2/dossier/testrs.sh echo '' | tee -a $MA_VAR1/$MA_VAR2/dossier/testrs.sh echo "# Variables" | tee -a $MA_VAR1/$MA_VAR2/dossier/testrs.sh

Mais je trouve ça plus pratique (on voit mieux le contenu du fichier, le nom du fichier n’est utilisé qu’une seule fois, on peut imaginer que c’est un chouia plus léger mais c’est pas sur) :

[code]cat > $MA_VAR1/$MA_VAR2/dossier/testrs.sh <<“EOF”
#!/bin/sh

Variables

EOF[/code]

Je devais être fatigué quand j’ai regardé pour le paramètre -v effectivement :frowning:

Merci je connaissais pas tee… je vais étudier, disons que j’avais cru lire que -v passait l’exécution en mode silencieux… Le code de sortie est assez conséquent et j’aurais aimer que cela se fasse en arrière plan.

Après lecture, tee ne permet pas de générer la sortie sans rien afficher, y aurais t’il un moyen de rendre cela sans message lors de la sortie du fichier ?

Il t’affiche quoi ? Parce que ça :

echo '#!/bin/sh' > $MA_VAR1/$MA_VAR2/dossier/testrs.sh echo '' >> $MA_VAR1/$MA_VAR2/dossier/testrs.sh echo "# Variables" >> $MA_VAR1/$MA_VAR2/dossier/testrs.sh
Ça n’affiche rien à l’écran.

ouais désolé, j’ai dormis et cela vas mieux :smiley: Excusez moi du dérangement… :blush: :blush: :blush:

Bonjour,

j’ai encore un petit problème par rapport aux variables de couleur qui sont interprété bizarrement dans la sortie du fichier…

Le \033 de NOIR="\033[1;30m" est remplacé par un caractère bizarre ESC (e)…

Auriez-vous une idée ?

J’ai essayé avec echo -e mais pareil…

Remplace :

par

peut être (mais je ne suis pas convaincu).

Quel est la ligne exact (avec le echo) ?

J’ai testé :

et en mettant -e devant echo.

:confused: :blush:

Voila :

Pour les variables, c’est niquel, merci mais avec un echo, j’ai toujours pareil…

echo 'NOIR="\\033[1;30m"' >> mon_fichier.sh echo 'ROUGE="\\033[1;31m"' >> mon_fichier.sh echo 'NORMAL="\033[0;39m"' >> mon_fichier.sh

Une fois le bash généré, j’ai :

Tu as oublié de modifier une ligne.

arff désolé, j’ai pas copié/collé mais écris manuellement, dans le bash c’est correct :blush:

echo "# Couleur" >> monfichier.sh echo 'NOIR="\\033[1;30m"' >> monfichier.sh echo 'ROUGE="\\033[1;31m"' >> monfichier.sh echo 'VERT="\\033[1;32m" ' >> monfichier.sh echo 'ORANGE="\\033[0;33m"' >> monfichier.sh echo 'BLEU="\\033[1;34m"' >> monfichier.sh echo 'MAGENTA="\\033[0;35m"' >> monfichier.sh echo 'CYAN="\\033[1;36m"' >> monfichier.sh echo 'BLANC="\\033[0;37m"' >> monfichier.sh echo 'NORMAL="\\033[0;39m"' >> monfichier.sh echo 'if [ "$(whoami)" = "root" ]; then' >> monfichier.sh echo " echo \"""$ROUGE""Désolé, l'utilisateur root ne peut pas exécuter ce fichier.""$NORMAL""\"" >> monfichier.sh echo " exit 1" >> monfichier.sh echo "fi" >> monfichier.sh

J’ai testé sans “”$COULEUR"", en utilisant des ’ ’ et j’arrive au même résultat… dur dur…

Chez moi ça ça marche :

[code]#!/bin/bash

cat >> monfichier.sh <<“EOF”

Couleur

NOIR="\033[1;30m"
ROUGE="\033[1;31m"
VERT="\033[1;32m"
ORANGE="\033[0;33m"
BLEU="\033[1;34m"
MAGENTA="\033[0;35m"
CYAN="\033[1;36m"
BLANC="\033[0;37m"
NORMAL="\033[0;39m"
if [ “$(whoami)” = “root” ]; then
echo "${ROUGE}Désolé, l’utilisateur root ne peut pas exécuter ce fichier.${NORMAL}"
exit 1
fi
EOF[/code]

(d’ailleurs il y a une erreur avec le war.sh qui se balade)

Dans le bash lui même, j’ai pas de problème.

Je génère un autre bash en exportant les variables et là je rencontre le problème…

Si je fait un cat comme toi, pas de soucis de ce côté… :open_mouth:

Tout est dans les guillemets autour du premier EOF. Ça demande à bash de ne pas chercher à comprendre ce qui est dans le document.

On se comprend pas je pense :frowning: :blush: et je ne sais pas comment l’expliquer autrement :blush:.

Dans un bash, j’exécute ceci :

[quote]
echo ‘#!/bin/sh’> monfichier.sh
echo ‘’ >> monfichier.sh
echo “# Couleur” >> monfichier.sh
echo ‘NOIR="\033[1;30m"’ >> monfichier.sh
echo ‘ROUGE="\033[1;31m"’ >> monfichier.sh
echo 'VERT="\033[1;32m" ’ >> monfichier.sh
echo ‘ORANGE="\033[0;33m"’ >> monfichier.sh
echo ‘BLEU="\033[1;34m"’ >> monfichier.sh
echo ‘MAGENTA="\033[0;35m"’ >> monfichier.sh
echo ‘CYAN="\033[1;36m"’ >> monfichier.sh
echo ‘BLANC="\033[0;37m"’ >> monfichier.sh
echo ‘NORMAL="\033[0;39m"’ >> monfichier.sh
echo ‘if [ “$(whoami)” = “root” ]; then’ >> monfichier.sh
echo " echo “${ROUGE}Désolé, l’utilisateur root ne peut pas exécuter ce fichier.${NORMAL}”" >> monfichier.sh
echo " exit 1" >> monfichier.sh
echo “fi” >> monfichier.sh[/quote]

et là, la sortie du code couleur ne fonctionne pas…En espérant que cela te permet de mieux comprendre le problème.

L’erreur :

Protège les $ :

Ce que je ne comprends pas c’est pourquoi tu t’entête à utiliser la méthode avec echo qui est plus complexe, moins lisible et moins maintenable quand je te présente une solution qui “juste” marche comme diraient les amerloc’.

Yes, niquel merci.

C’est moi alors qui ne t’avais pas compris, désolé…