Um padrão / convenção oficial para uma extensão de arquivo que os scripts shell originam


11

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

  1. Se eu quiser executar este script em um subshell.

    ./script.sh 
  2. Se eu quero 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 .sourceou .sourceme?


Atualizar

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


1
Algumas pessoas pensam que shell scripts que podem ser executados de executáveis (ou seja, eles começam com #!/bin/shou similar deve ter nenhuma extensão, porque o usuário não precisa se preocupar com o que a linguagem do script subjacente foi escrito.
the_velour_fog

1
Depende do que é, você pode ter env, rc, conf etc #
123 #

1
@ 123 depende, por vezes, uma vez que você construir isso é algo útil e colocá-lo em $PATH, você chegou a usar o tempo todo, então é como, ps, ls, curle todos os outros comandos, então você começa a funções de conclusão shell construção em torno dele, acho tudo bem em largar a extensão. Mas sim, quando você está fornecendo um script de shell, que não são executáveis ​​por si mesmos, eu não chmod +xos faria e os nomearia script.sh. também costumo atribuir uma extensão apenas porque, se não o fizer, não receberei destaque de sintaxe no meu editor.
#

5
Não há convenção. Se você está em uma empresa ou está colaborando em um projeto de compartilhamento (por exemplo, código-fonte aberto), pode ter padrões locais em conformidade, mas não existe uma convenção de fato.
Stephen Harris

1
A palavra "convenção" (significado # 2) é o que provavelmente está levando a respostas "baseadas em opiniões". A especificação de grupo aberto para origem não impõe nenhum padrão de nomenclatura.
Jeff Schaller

Respostas:


18

Eu usaria .sh(para arquivos no shidioma POSIX , .bashpara basharquivos não compatíveis com sh , que é a extensão que identifica o idioma em que o script está escrito) para arquivos destinados a serem originados (ou, geralmente, não destinados a serem executados), e nenhuma extensão para arquivos que devem ser executados.

Você também pode adicionar um:

#! /bin/echo Please-source

she-bang, para que, quando executados por engano (embora eu esperasse que esses arquivos não devessem receber permissões de execução, o que já impediria a execução), você receberá um aviso de que deve ser originado.


Você também pode sair se o script não for originado ( stackoverflow.com/q/2683279/4694621 )
Mateusz Piotrowski

4

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

Se você deseja impedir que 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

1
Se você estiver indo para usar o específica do Linux /proc/$$/exe, assim como você pode fazê-lo como case $(readlink "/proc/$$/exe") in */bash)..., embora aqui, eu simplesmente usar: if [ -z "$BASH_VERSION" ]. ( echodeveria ser echo >&2). (Gosto de você .confou .shlibs(mas para arquivos sh) de extensões, embora isso não ajude os marcadores de sintaxe que dependem da extensão).
Stéphane Chazelas 01/08/16

Sim, eu vejo isso .shlibs, em algum tipo de programa que não carrego, mas não me lembro, então comecei a usá-lo. Muito obrigado pela dica, vou editar a questão com a versão readlink muito mais bonita. ;-)
Luciano Andress Martini

@ O destaque da sintaxe do StéphaneChazelas pode ser acionado por meio de metadados nos próprios arquivos (pelo menos para o Emacs e Vim), portanto a escolha da extensão do nome do arquivo é irrelevante nesse aspecto.
Kusalananda
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.