Um padrão / convenção oficial para uma extensão de arquivo para scripts de shell para fonte

7

Eu queria saber se existe uma convenção para extensões de tipo de arquivo para scripts de shell que você deseja criar em vez de executar. Por exemplo:

  1. Se eu quiser executar este script em uma subcamada.

    ./script.sh 
    
  2. Se eu quiser lembrar de executar este script a partir do shell atual.

    . script.source 
    

Existe uma convenção (como POSIX, por exemplo) para um tipo de arquivo no segundo exemplo? Algo como .source ou .sourceme ?

Atualizar

Esta questão não pergunta sobre nenhuma opinião. Eu afirmei claramente que gostaria de saber se existe uma extensão de arquivo padronizada para esse tipo de script. Essa questão é ainda menos baseada em opinião do que essa pergunta bem recebida sobre um problema semelhante ( Use extensão .sh ou .bash para scripts bash? ).

    
por Mateusz Piotrowski 01.08.2016 / 15:02

2 respostas

15

Eu usaria .sh (para arquivos no idioma POSIX sh , .bash para arquivos bash não compatíveis com sh, ou seja, a extensão identifica o idioma em que o script foi escrito) para arquivos destinado a ser originado (ou, mais geralmente, não destinado a ser executado), e nenhuma extensão para arquivos que devem ser executados.

Você também pode adicionar um:

#! /bin/echo Please-source

she-bang, de modo que quando executado por engano (embora eu espere que esses arquivos não recebam permissões de execução, o que já impediria a execução), você receberá um aviso de que deveria ser originado.

    
por 01.08.2016 / 15:18
4

No caso de arquivos fonte, eu acho que a melhor maneira é o arquivo .conf para arquivos que configuram seu script e .shlib ou .shlibs para arquivos que possuem funções ou outros utilitários.

Se você quiser impedir que o seu script seja executado com o shell errado e o hashbang não for suficiente para você, use:

if [ "$(readlink "/proc/$$/exe")" != "/bin/bash" ]; then
      echo >&2 "CAUTION: Wrong interpreter detected. You must use bash."
      exit 1
fi
    
por 01.08.2016 / 15:26