Een eenvoudigere optie is naar mijn mening :
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
Dit werkt omdat het commando binnenin $(...)
wordt uitgevoerd voordat todo.txt
wordt overschreven met > todo.txt
Terwijl de andere antwoorden prima werken, vind ik dit veel makkelijker te onthouden omdat ik elke dag echo en kat gebruik.
EDIT: Deze oplossing is een heel slecht idee als er backslashes in todo.txt
zitten, want dankzij de -e
vlagsecho zal deze worden geïnterpreteerd. Een andere, veel eenvoudigere manier om nieuwe lijnen in de voorwoordstring te krijgen is…
echo "task goes here
$(cat todo.txt)" > todo.txt
…gewoonweg om nieuwe lijnen te gebruiken. Zeker, het is geen one-liner meer, maar realistisch gezien was het ook geen one-liner voordien. Als je dit in een script doet, en je maakt je zorgen over het inspringen (bv. je voert dit uit in een functie) zijn er een paar workarounds om dit nog steeds goed te laten passen, inclusief maar niet beperkt tot:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
Ook, als je je zorgen maakt of er een nieuwe regel wordt toegevoegd aan het einde van todo.txt
, gebruik deze dan niet. Nou ja, behalve de op één na laatste. Dat is geen probleem voor het einde.