Une option plus simple à mon avis est :
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
Cela fonctionne car la commande à l'intérieur de $(...)
est exécutée avant que todo.txt
ne soit écrasé par > todo.txt
Alors que les autres réponses fonctionnent bien, je trouve cela beaucoup plus facile à retenir car j'utilise echo et cat tous les jours.
EDIT: Cette solution est une très mauvaise idée s'il y a des backslashes dans todo.txt
, car grâce au drapeau de -e
, echo les interprétera. Un autre moyen, bien plus simple, d'introduire des interlignes dans la chaîne de préface est…
echo "task goes here
$(cat todo.txt)" > todo.txt
…d'utiliser simplement des interlignes. Bien sûr, ce n'est plus une ligne unique, mais de façon réaliste, ce n'était pas non plus une ligne unique auparavant. Si vous faites cela à l'intérieur d'un script et que vous vous inquiétez de l'indentation (par exemple, vous l'exécutez à l'intérieur d'une fonction), il existe quelques solutions de contournement pour que cela fonctionne encore parfaitement, notamment :
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
De même, si vous vous souciez de savoir si une nouvelle ligne sera ajoutée à la fin de todo.txt
, n'utilisez pas ces solutions. Sauf l'avant-dernier. Cela ne nuit pas à la fin.