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).