Como devo reutilizar uma função em vários scripts?

3

No bash, às vezes eu gostaria de reutilizar uma função em vários scripts. É ruim repetir a definição da função em todos os scripts? Em caso afirmativo, qual é uma boa prática?

O seguinte caminho é uma boa ideia?

  • envolva a definição de uma função myfunction em seu próprio script define_myfunction.sh ,
  • em qualquer script em que a função é chamada, source define_myfunction.sh e, em seguida, chame a função myfunction arg1 arg2 ... .

Obrigado.

    
por Tim 05.06.2018 / 18:56

2 respostas

2

Em bash , essa é uma boa maneira de fazer isso, sim.

O fornecimento do script "library" usando source ou . seria uma solução adequada para o seu problema de querer compartilhar uma definição de função entre dois ou mais scripts. Cada script que precisava de acesso à (s) função (ões) definida (s) no (s) script (s) da "biblioteca" criaria o (s) arquivo (s) necessário (s), provavelmente na parte superior do script.

Isso permitiria que você coletasse funções relacionadas em um único script de "biblioteca" e as fornecesse para obter acesso a elas.

Não totalmente não relacionado, mas o shell bash também tem a capacidade de originar automaticamente um arquivo ao executar um shell não interativo (por exemplo, um script). Isso pode ser usado para configurar um ambiente específico para o script:

BASH_ENV="$HOME/stuff/script.env" ./myscript

... onde script.env pode fazer qualquer coisa, desde definir funções e configurar variáveis shell ou ambiente, até obter outros arquivos, etc.

Alguns shells, como ksh93 , possuem uma variável de ambiente que aponta para um diretório que pode conter scripts de definição de função como esses. Em ksh93 , essa variável é chamada FPATH . Um script, $FPATH/foo , conteria uma função chamada foo , que seria encontrada automaticamente quando o usuário digitar foo na linha de comando (ou em um script). O bash shell, no meu conhecimento, não possui essa funcionalidade específica.

Outros shells têm outras formas de funcionalidade de "carregamento automático".

    
por 05.06.2018 / 19:03
1

Essa pergunta pode ficar sinalizada por ser subjetiva, mas acredito que seja geralmente aceito como prática recomendada usar bibliotecas para códigos comumente usados, em vez de reinventar a roda toda vez. source de um script que define funções e variáveis é a forma de shell para fazer isso, então eu diria que sim, ter scripts de biblioteca e source -los provavelmente é uma boa prática.

Na verdade, vou mais além e tenho um diretório bin no meu PATH com ferramentas e scripts que eu uso com frequência; alguns desses scripts de biblioteca estão lá, então eu posso source prontamente para uso no meu shell interativo.

    
por 05.06.2018 / 18:58