Una opción más simple en mi opinión es :
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
Esto funciona porque el comando dentro de $(...)
se ejecuta antes de que todo.txt
se sobrescriba con > todo.txt
Mientras que las otras respuestas funcionan bien, encuentro esto mucho más fácil de recordar porque uso el eco y el gato todos los días.
EDIT: Esta solución es muy mala idea si hay barras invertidas en todo.txt
, porque gracias a la bandera de -e
el eco las interpretará. Otra forma mucho más fácil de introducir nuevas líneas en la cadena del prefacio es…
echo "task goes here
$(cat todo.txt)" > todo.txt
…simplemente usar nuevas líneas. Claro, ya no es una línea, pero siendo realistas, tampoco era una línea antes. Si estás haciendo esto dentro de un script, y te preocupa la sangría (por ejemplo, estás ejecutando esto dentro de una función) hay algunas soluciones para que esto todavía encaje bien, incluyendo pero no limitándose a:
(echo 'task goes here' && cat todo.txt) > todo.txt
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
Además, si te preocupa que se añada una nueva línea al final de todo.txt
, no las uses. Bueno, excepto el penúltimo. Eso no afecta al final.