No meu caso .profile
, uso o código a seguir para garantir que aliases e funções relacionados ao Bash sejam originados apenas se o shell de logon for realmente o Bash :
# If the current (login) shell is Bash, then
if [ "${BASH_VERSION:-}" ]; then
# source ~/.bashrc if it exists.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Atualmente, estou colocando meus arquivos de configuração de shell, scripts e funções sob controle de versão. Recentemente, também iniciei o processo de remoção de Bashisms casuais de scripts de shell que não se beneficiam de recursos específicos do Bash, por exemplo, substituindo function funcname()
por funcname()
.
Para o meu repositório de arquivos shell, configurei um gancho de pré-confirmação que executa o checkbashisms
utilitário do pacote devscripts do Debian em cada sh
arquivo do repositório para garantir que eu não introduza inadvertidamente sintaxe específica do Bash. No entanto, isso gera um erro para o meu .profile
:
possible bashism in .profile line 51 ($BASH_SOMETHING):
if [ "${BASH_VERSION:-}" ]; then
Fiquei me perguntando se havia uma maneira de verificar qual shell está sendo executado que não acionaria um aviso checkbashisms
.
Verifiquei a lista de variáveis relacionadas ao shell listadas pelo POSIX na esperança de que uma delas pudesse ser usada para mostrar o shell atual. Também examinei as variáveis definidas em um shell Dash interativo, mas, novamente, não consegui encontrar um candidato adequado.
No momento, excluí o .profile
processamento por checkbashisms
; Como é um arquivo pequeno, não é difícil verificá-lo manualmente. No entanto, depois de pesquisar o problema, eu ainda gostaria de saber se existe um método compatível com POSIX para determinar qual shell está sendo executado (ou pelo menos uma maneira que não causa checkbashisms
falha).
Antecedentes / esclarecimentos
Uma das razões pelas quais estou colocando meus arquivos de configuração do shell sob controle de versão é configurar meu ambiente em todos os sistemas nos quais atualmente efetuo logon regularmente: Cygwin, Ubuntu e CentOS (ambos 5 e 7, usando o Active Directory para usuários). autenticação). Costumo fazer logon através de ambientes X Windows / desktop e SSH para hosts remotos. No entanto, eu gostaria que isso fosse à prova do futuro e tivesse a menor dependência possível das dependências do sistema e de outras ferramentas.
Eu tenho usado checkbashisms
como uma verificação de integridade simples e automatizada para a sintaxe dos meus arquivos relacionados ao shell. Não é uma ferramenta perfeita, por exemplo, eu já apliquei um patch para que não reclame sobre o uso dos command -v
meus scripts. Enquanto pesquisava, aprendi que o objetivo real do programa é garantir a conformidade com a política Debian que, como eu a entendo, é baseada no POSIX 2004 em vez de 2008 (ou na revisão de 2013).
.bash_profile
que use ambas .profile
e (condicionalmente) .bashrc
.