Eine einfachere Option ist meiner Meinung nach :
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
Dies funktioniert, weil der Befehl innerhalb von $(...)
ausgeführt wird, bevor todo.txt
mit > todo.txt
überschrieben wird. Während die anderen Antworten gut funktionieren, finde ich dies viel leichter zu merken, weil ich echo und cat jeden Tag benutze.
EDIT: Diese Lösung ist eine sehr schlechte Idee, wenn es irgendwelche Backslashes in todo.txt
gibt, denn dank der Flagge -e
wird echo sie interpretieren. Eine andere, sehr viel einfachere Möglichkeit, Zeilenumbrüche in die Vorwortzeichenfolge zu bekommen, ist…
echo "task goes here
$(cat todo.txt)" > todo.txt
…einfach Zeilenumbrüche zu verwenden. Sicher, es ist kein Einzeiler mehr, aber realistischerweise war es vorher auch kein Einzeiler. Wenn Sie dies innerhalb eines Skripts tun und Bedenken wegen des Einrückens haben (z.B. wenn Sie dies innerhalb einer Funktion ausführen), gibt es ein paar Umgehungsmöglichkeiten, damit dies immer noch gut passt, einschließlich, aber nicht beschränkt auf:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
Auch wenn Sie sich darum kümmern, ob ein Zeilenumbruch am Ende von todo.txt
hinzugefügt wird, verwenden Sie diese nicht. Nun, außer dem vorletzten. Das bringt das Ende nicht durcheinander.