Essayer de créer un petit script capable d’écrire une partie du script dans le fichier de sortie sans aucune modification (tel quel)
texte du fichier source
echo "
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0
echo"#${green}Installing packages${reset}#" &&
" >> output.txt
Sortie désirée:
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0
echo"#${green}Installing packages${reset}#" &&
Ce que je reçois, c'est:
yellow=^[[33m
bel=^G
red=^[[31m
green=^[[32m
reset=^[(B^[[m
echo"#${green}Installing packages${reset}#" &&
Utilisation de CentOS 7 Minimal fresh install Vous recherchez une solution à appliquer au script/texte complet, sans modification de ligne à ligne, je suppose que vous pouvez également utiliser sed aussi.
Vous devez échapper aux backticks (`):
#!/bin/bash
echo "
yellow=\`tput setaf 3\`
bel=\`tput bel\`
red=\`tput setaf 1\`
green=\`tput setaf 2\`
reset=\`tput sgr0\`
" >> output.txt
Je préfère utiliser cette méthode pour multiligne:
#!/bin/bash
cat << 'EOF' >> output.txt
yellow=$(tput setaf 3)
bel=$(tput bel)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
EOF
Utilisez un guillemet simple pour empêcher les extensions:
echo '
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
' >> output.txt
Pour plus de détails, voir Différence entre les guillemets doubles et simples .
Si votre texte inclut une citation simple, il est possible que ce qui précède ne fonctionne pas. Dans ce cas, utiliser un ici, doc serait plus sûr. Par exemple, ce qui précède va casser si vous insérez une ligne: var='something'
.
En utilisant un doc ici ce sera comme ceci:
cat >> output.txt <<'EOF'
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
var='something'
EOF
Juste un ajout tardif:
La commandeecho 'string' >> output
est simple et géniale. Mais cela peut vous donner l'erreur '...: Permission denied' combinée à Sudo
.
J'ai récemment eu un petit problème avec Sudo echo 'string \n other string \n' > /path/to/file
Ce qui a fonctionné le mieux pour moi:printf "Line1\nLine2\nLine3" | Sudo tee --append /path/to/file
Le fait que la chaîne soit également imprimée sur la sortie standard vous permet également de voir ce qui a été écrit dans le fichier.
Merci à Chepner
La meilleure solution que j'ai trouvée est:
echo '
yellow=$(tput setaf 3)
bel=$(tput bel)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
echo"#${green}Installing packages${reset}#"
' >> output
Avec cette solution, tout le texte va dans le fichier de sortie sans modifications et les définitions de couleurs fonctionnent aussi sans modifications.