Seu
# 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
O código é completamente compatível com POSIX e a melhor maneira de verificar se você está executando bash . É claro que a variável $BASH_VERSION é bash-specific, mas é exatamente por isso que você a está usando! Para verificar se você está executando bash !
Observe que $BASH_VERSION será definido se bash for chamado como bash ou sh . Depois de declarar que você está executando bash , você pode usar [ -o posix ] como um indicador de que o shell foi chamado como sh (embora essa opção também seja definida quando POSIXLY_CORRECT está no ambiente ou bash é chamado com -o posix , ou com SHELLOPTS = posix no ambiente. Mas em todos esses casos, bash se comportará como se chamado como sh ).
Outra variável que você poderia usar em vez de $BASH_VERSION e que checkbashism não parece reclamar, a menos que a opção -x seja $BASH . Isso também é específico para bash , então você também deve poder usar para determinar se está executando bash ou não.
Eu também diria que não é realmente um uso adequado de checkbashisms . checkbashisms é uma ferramenta para ajudar você a escrever scripts portáveis de sh (de acordo com a especificação sh na política Debian, um superconjunto de POSIX), ajuda a identificar sintaxe não padrão introduzida por pessoas escrevendo scripts em sistemas onde sh é um link simbólico para bash .
Um .profile é interpretado por diferentes shells, muitos dos quais não são compatíveis com POSIX. Geralmente, você não usa sh como seu shell de login, mas shells como zsh , fish ou bash com recursos interativos mais avançados.
bash e zsh , quando não chamado como sh e quando o respectivo arquivo de sessão de perfil ( .bash_profile , .zprofile ) não estiver em conformidade com POSIX (especialmente zsh ), mas ainda ler .profile .
Portanto, não é a sintaxe POSIX que você deseja para .profile , mas uma sintaxe compatível com POSIX (para sh ), bash e zsh se você usar esses shells (possivelmente até Bourne como o shell Bourne também lê .profile , mas não é comumente encontrado em sistemas baseados em Linux).
checkbashisms definitivamente ajudará você a descobrir bashisms , mas pode não apontar a sintaxe POSIX que não é compatível com zsh ou bash .
Aqui, se você quiser usar o código bash -specific (como a solução desse erro bash no qual ele não lê ~/.bashrc em shells de login interativo), uma abordagem melhor seria ter ~/.bash_profile faça isso (antes ou depois de obter ~/.profile onde você colocou suas inicializações de sessão comuns).