Funções definidas em .zshrc não encontradas ao executar script

3

Eu tenho uma função em .zshrc que atualiza principalmente o PATH :

my_function()
{
        PATH=...
}

e alguns scripts que dependem disso, por exemplo my_script.sh começa com as seguintes linhas:

my_function
# do stuff ...

Eu tenho o seguinte em crontab :

00 02 * * * /path/to/my/zsh /path/to/my_script.sh

mas notei que, mesmo quando executo my_script.sh como ./my_script.sh manualmente (ou seja, do meu shell Zsh interativo (?)), recebo o erro:

Command not found: my_function

mesmo que eu possa invocar perfeitamente my_function do terminal.

Por quê? Gostaria que uma solução que não exigisse que eu adicionasse um shebang ao meu script (para mais informações, consulte isso )

Eu encontrei as seguintes diagrama. Eu imagino que no meu caso, o cron lança um shell não-interativo, não interativo, e é por isso que nenhum dos arquivos init é executado. Isso está correto?

    
por Josh 28.04.2014 / 20:30

1 resposta

10

Coloque suas funções em .zshenv .

.zshenv é originado em todas as invocações do shell, a menos que a opção -f esteja configurada. Ele deve conter comandos para definir o caminho de pesquisa do comando, além de outras variáveis de ambiente importantes. .zshenv não deve conter comandos que produzam saída ou assuma que o shell está anexado a um tty.

.zshrc é originado em shells interativos. Ele deve conter comandos para configurar aliases, funções, opções, atalhos de teclado, etc.

link

    
por 28.04.2014 / 20:54