La tua linea crontab ha uno o più asterischi *
, che indica "in qualsiasi momento". Quando quella linea viene sostituita dalla sostituzione del comando, il risultato è qualcosa di simile
echo * * * * * cmd > /path/to/file
Mentre la maggior parte delle ulteriori espansioni non vengono applicate all'output della sostituzione del comando, l' espansione del percorso è (come la divisione del campo) :
I risultati della sostituzione dei comandi non devono essere elaborati per un'ulteriore espansione della tilde, espansione dei parametri, sostituzione dei comandi o espansione aritmetica. Se si verifica una sostituzione di comando tra virgolette doppie, la divisione dei campi e l' espansione del percorso non devono essere eseguite sui risultati della sostituzione.
L'espansione del percorso è ciò che si trasforma *.txt
in un elenco di nomi di file corrispondenti (globbing), dove *
corrisponde a tutto. Il risultato finale è che ottieni tutti i nomi di file (non nascosti) nella directory di lavoro elencati per ognuno *
nella tua linea crontab.
Puoi risolvere questo problema citando l'espansione, se il codice che hai pubblicato era un rappresentante di un comando più complesso:
sudo bash -c 'echo "$(tail -n 1 /etc/crontab)" > /path/to/file'
ma più semplicemente perdi del echo
tutto:
sudo bash -c 'tail -n 1 /etc/crontab > /path/to/file'
Questo dovrebbe fare quello che vuoi ed è anche più semplice (l'unica altra differenza sostanziale è che questa versione ometterà la divisione dei campi che altrimenti si sarebbe verificata, quindi le serie di spazi non verranno compresse).