A chamada de função Bash do arquivo de script falha, enquanto a chamada do terminal é bem-sucedida

0

No Ubuntu 16.04 com Bash eu criei um arquivo $HOME/ulcwe/software_internal.sh que contém uma função rse() sem uma chamada. O arquivo é originado em ~/.bashrc (que foi originado por ele mesmo) e eu posso chamar rse de qualquer lugar no terminal e ele será executado sem erro.

Ainda assim, tentei executar esse arquivo de script que contém uma chamada para rse em linha 36, e eu recebo este erro:

line 36: rse: command not found

Por que a função foi chamada com sucesso na chamada manual (digitando e executando rse no Bash), mas não no script Bash e como eu poderia chamá-la com êxito do script?

    
por user9303970 04.03.2018 / 13:27

1 resposta

3

Você terá que se certificar de que a função esteja disponível para o script. Você pode fazer isso de duas maneiras:

  1. source o arquivo que contém a definição da função ou
  2. export da função antes de chamar o script ( export -f rse exportaria a função).

As funções, assim como as variáveis do shell, não fazem parte do ambiente herdado pelos scripts. As variáveis do shell precisam ser exportadas para que se tornem variáveis de ambiente e as funções também podem ser exportadas.

Como normalmente não estou trabalhando com funções exportadas (ou bash ), estou realmente um pouco incerto sobre a mecânica por trás das funções exportadas. Eles (presumivelmente) não podem ser chamados por qualquer processo, apenas bash scripts.

    
por 04.03.2018 / 13:55