Su línea crontab tiene uno o más asteriscos *
, que indica "en cualquier momento". Cuando esa línea se sustituye desde la sustitución del comando, el resultado es algo así como
echo * * * * * cmd > /path/to/file
Si bien la mayoría de las expansiones adicionales no se aplican a la salida de la sustitución de comandos, la expansión del nombre de ruta es (al igual que la división de campos) :
Los resultados de la sustitución de comandos no se procesarán para una mayor expansión de tilde, expansión de parámetros, sustitución de comandos o expansión aritmética. Si se produce una sustitución de comando entre comillas dobles, la división del campo y la expansión del nombre de ruta no se realizarán en los resultados de la sustitución.
La expansión de nombre de ruta es lo que se convierte *.txt
en una lista de nombres de archivo coincidentes (globbing), donde *
coincide con todo. El resultado final es que obtienes cada nombre de archivo (no oculto) en el directorio de trabajo listado para cada uno *
en tu línea crontab.
Puede solucionar esto citando la expansión, si el código que publicó fue un representante de un comando más complejo:
sudo bash -c 'echo "$(tail -n 1 /etc/crontab)" > /path/to/file'
pero de manera más directa solo pierdes por echo
completo:
sudo bash -c 'tail -n 1 /etc/crontab > /path/to/file'
Esto debería hacer lo que desea y también es más simple (la única otra diferencia material es que esta versión omitirá la división de campos que de otro modo habría ocurrido, por lo que las ejecuciones de espacios no se contraerán).