1) Why do we need the curly brackets
Porque você precisa canalizar a saída de cat
e a saída de echo
para crontab -
. Sem as chaves, não é possível montar a saída dos dois comandos em um único pipe.
(or can we use single quotes) here
Não. ... | 'cat; echo "0 0 * * * /path/to/cron/job"' | ...
significa "pipe para um executável chamado cat; echo "0 0 * * * /path/to/cron/job"
". Isso não faz sentido.
2) And why do we need the
cat;
command here?
Você não faz. Você poderia ter escrito a mesma coisa com mais eficiência do que:
{ crontab -l; echo '0 0 * * * /path/to/cron/job'; } | crontab -
3)
crontab -
. If my understanding is correct, does-
get replaced by the output of the previous command in the pipeline?
Sim, mas isso porque crontab
suporta especificamente isso. Usar -
para significar stdin
e / ou sdtout
é uma convenção compreendida por muitos comandos, mas é apenas uma convenção. Não é obrigatório pelo shell, como, por exemplo, >file
ou | command
.