J'ai un script Shell que j'exécute dans Cygwin (c'est peut-être le problème). Pour ce morceau de code, je veux simplement écrire la première ligne et ajouter un saut de ligne:
echo "`date` User `whoami` started the script." >> output.log
echo >> output.log
Mais le fichier output.log ne semble jamais faire de pause. Si j'exécute le script plusieurs fois, c'est comme si le deuxième écho n'écrivait pas dans le fichier.
J'ai aussi essayé:
echo -e "`date` User `whoami` started the script.\n" >> output.log
Il donne les mêmes résultats.
La chose étrange est que si je viens d'entrer la deuxième instruction echo ci-dessus sur la ligne de commande, sans l'ajouter au fichier, cela me donne la sortie attendue avec le saut de ligne de fin.
Je parie que le problème est que Cygwin écrit des fins de ligne Unix (LF) dans le fichier, et vous l'ouvrez avec un programme qui attend les fins de ligne Windows (CRLF). Pour déterminer si tel est le cas - et pour un peu de solution de contournement hackish - essayez:
echo "`date` User `whoami` started the script."$'\r' >> output.log
(où le $'\r'
à la fin est un retour chariot supplémentaire; il, plus la fin de ligne Unix, se traduira par une fin de ligne Windows).
Essayer:
echo "`date` User `whoami` started the script."$'\n' >> output.log
ou juste:
echo $'\n' >> output.log
Essayer
echo -en "`date` User `whoami` started the script.\n" >> output.log
Essayez d'émettre ce message plusieurs fois. J'espère que vous recherchez la même sortie.
Vous pouvez le faire sans redirection d'E/S:
sed -i 's/$/\n/' filename
Vous pouvez également utiliser cette commande pour ajouter une nouvelle ligne à une liste de fichiers:
find dir -name filepattern | xargs sed -i 's/$/\n/' filename
Pour echo
, certains shells l'implémentent comme une commande intégrée Shell. Il pourrait ne pas accepter le -e
option. Si vous souhaitez toujours utiliser echo
, essayez de trouver l'emplacement du fichier binaire echo
, à l'aide de which echo
. Dans la plupart des cas, il est situé dans /bin/echo
, vous pouvez donc utiliser /bin/echo -e "\n"
pour faire écho à une nouvelle ligne.