'source' embutido bash não reconhecido no ambiente cron

1

Uma entrada crontab do usuário que lê:

0 */4 * * * $HOME/postscript/fprogcache-sync

funciona bem. Querendo adicionar algumas variáveis de ambiente ao contexto do cron-job, eu tentei

0 */4 * * * source $HOME/.profile; $HOME/postscript/fprogcache-sync

Isso não funcionou até que eu alterei source para . . A mensagem de erro (enviada pelo email postfix para o root) foi /bin/sh: 1: source: not found , seguida pela confirmação de que o script foi executado com alegria.

Lembro de ter lido em algum lugar que source é definido como um alias do . embutido no shell bash. Se assim for, explicaria porque source não é reconhecido no contexto cron.

É o caso? Em caso afirmativo, onde está o alias do sistema para . definido?

    
por Cbhihe 28.03.2016 / 22:01

1 resposta

5
  

É o caso? Em caso afirmativo, onde está o alias do sistema para . definido?

É o caso, mas não existe um alias de todo o sistema.

. e source são os mesmos incorporados ao Bash, mas isso é definido diretamente no nível do código-fonte ( link ).

A razão por trás de ter dois nomes para o mesmo builtin provavelmente reside no fato de que Bash pretende ser compatível com POSIX até certo ponto ; então source para fornecer um nome mnemônico e . para cumprir os padrões POSIX.

O motivo real pelo qual source não funciona em cron é que por padrão cron jobs no crontab são executados em sh , que é um link simbólico para /bin/dash (um shell que visa seja compatível com POSIX) que simplesmente não implementa source . No entanto, ele implementa . .

De man dash :

. file
       The commands in the specified file are read and executed by the
       shell.
    
por kos 28.03.2016 / 22:14