Respostas:
Sim, você pode definir e usar variáveis dessa maneira. Há uma limitação (que você não encontrou nos seus exemplos): a string à direita do =sinal é interpretada literalmente, com espaços à esquerda removidos, para que você não possa usar construções como FOO=$BAR/qux(por exemplo PATH=$HOME/bin:$PATH, não fará nada útil).
Isso é afirmado na documentação, que você pode ver executando
man 5 crontab
(Observe que man crontabmostra a documentação do crontab comando , na seção 1 do manual; você deseja a documentação do crontab formato do arquivo , na seção 5.)
Apenas tentei, sim, é possível. Você pode descobrir isso com este exemplo simples, coloque isso em seu crontab:
FOO = qwerty * * * * * eco $ FOO> ~ / out
E verifique o arquivo ~/out(atualizado a cada minuto), que deve conter "qwerty".
Embora os crontabs do Linux suportem a definição de algumas variáveis que mantêm valores literais, não é muito útil além de condensar texto longo em uma representação mais curta ou controlar algumas coisas sobre o cron em si, como para onde enviar a saída de email.
A flexibilidade é entender que a parte do comando da entrada cron será passada para /bin/sh -cou o shell definido SHELLnos sistemas usando o Vixie cron (aquele geralmente instalado nos sistemas Linux). O que isso significa é que o restante da linha de comando é um simples script de shell. NOTA: saiba qual shell está sendo usado. No Linux, /bin/shnormalmente /bin/bash, o $( ... )comando incorporado funciona, mas não em sistemas mais antigos, onde /bin/shapenas se entende `.
Por exemplo, eu tenho uma linha simples do crontab que arquiva um arquivo MBX de mensagens salvas mensalmente e o compacta. Se parece com isso:
15 0 1 * * nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf
Isso será executado no primeiro dia de cada mês às 12h15, defina um novo nome de arquivo com CCYYMM, mova o arquivo atual para o novo nome e o comprima. Lembre-se de que um escape %(sinal de porcentagem) sem escape será tratado como uma nova linha e os dados a seguir serão enviados como stdin para o comando que precede o sinal de porcentagem. É por isso que o normal date +Y+mestá escrito como date +\%Y\%macima.
Não, você não pode um cronjob pode conter apenas itens cron. Não é uma opção criar um script bash e executá-lo por meio de um cronjob?