Obviamente, existem algumas diferenças entre arquivos executáveis em bindiretórios e arquivos "de origem" editáveis.
- Para arquivos de origem, é útil ter um sufixo para que você possa ver o que é o quê e ajudar algumas ferramentas menos inteligentes que não conseguem varrer a
#!linha.
- Para módulos, eles são usados apenas por um conjunto de programas relacionados, todos os quais usam o mesmo intérprete (ou nenhum intérprete), e é convencional incluir
.pm, .shou .sonesses casos.
- Para programas executáveis, seu nome faz parte do "contrato de programação" pelo qual os usuários e outros scripts o invocam. É importante que o nome não mude, mesmo que a implementação mude ; então, obviamente, o nome do arquivo não deve ter um sufixo
No caso de um programa compilado, a diferença entre "origem" e "executável" é óbvia: uma contém código fonte, a outra contém linguagem de máquina ou interpretado por código. No caso de um script, não há diferença óbvia, mas o makecomando mantém uma separação nocional entre o "código-fonte de um script" e a "versão executável de um script": seu "compilador" padrão para "shell script" é simplesmente cp.
Eu recomendaria manter um $HOME/sourcediretório separado e:
- mantendo um link simbólico, como feito por
ln -s ../source/foo.sh $HOME/bin/foo; ou
- copie-os manualmente após fazer alterações (e testá-los), usando
install -m 755 foo.sh ../bin/foo; ou
- usando uma
Makefileregra para executar uma verificação de sintaxe antes de copiar o arquivo de origem $HOME/sourcepara o$HOME/bin
Nota de rodapé: um módulo de script de shell é utilizável apenas por outro script de shell e modifica o contexto interno desse script usando os comandos internos .ou source. Isso é diferente de um script executável, que (como qualquer programa) é executado como um processo separado e não pode modificar seu processo pai. Como convenção geral, os módulos entram /usr/lib/name_of_program/name_of_module.shenquanto os comandos entram /usr/bin/name_of_command(sem nenhum sufixo).