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 checkbashismsutilitário do pacote devscripts do Debian em cada sharquivo 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 .profileprocessamento 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 checkbashismsfalha).
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 checkbashismscomo 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 -vmeus 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_profileque use ambas .profilee (condicionalmente) .bashrc.