Estou no Fedora, onde todos os shells pré-instalados aparentemente suportam bashisms: bash --posix
does, e até mesmo sh
. Ainda assim, quando usei esta função ,
pathprepend () {
if [[ ":$PATH:" != *":$1:"* ]]; then
PATH="$1${PATH:+":$PATH"}"
fi
}
para adicionar um diretório a PATH
partir de ~/.profile
, o Git não o pegou. Note que echo $PATH
na sessão bash da qual eu estava usando o Git listou meu diretório, notei que só porque eu uso diff-highlight
, symlinked naquele diretório, e depois que comecei a usar a pathprepend
função acima o Git reclamou que diff-highlight
estava faltando. Depois de restaurar uma PATH
configuração compatível com POSIX, ele voltou a funcionar normalmente.
Isso me deixou pensando o que os programas usam para ler seu ambiente. Cada um deles vem com seu próprio mecanismo para fazer isso? Eles deixam o trabalho para algum shell ou biblioteca do sistema?
Editar
@Bodo, é isso que eu costumava fazer: em ~/.profile
,
pathprepend () {
if [[ ":$PATH:" != *":$1:"* ]]; then
PATH="$1${PATH:+":$PATH"}"
fi
}
pathprepend "$HOME/.local/bin"
Por "compatível com POSIX" quero dizer sem nenhuma bashism. Isto é o que tenho agora em ~/.profile
:
pathprepend () {
case ":$PATH:" in
*":$1:"*)
:;;
*)
PATH="$1${PATH:+":$PATH"}";;
esac
}
pathprepend "$HOME/.local/bin"
Em ambos os casos ~/.profile
é proveniente de ~/.bash_profile
, que contém
# Load the configuration for login sessions of any shell
if [[ -f "$HOME/.profile" ]]; then
source "$HOME/.profile"
else
echo >&2 "$HOME/.bash_profile: $HOME/.profile not found"
fi
# Load the configuration for interactive non-login Bash sessions
case "$-" in *i*)
if [[ -f "$HOME/.bashrc" ]]; then
source "$HOME/.bashrc"
else
echo >&2 "$HOME/.bash_profile: $HOME/.bashrc not found"
fi;;
esac
Não fiz isso export
PATH
porque Gordon Davisson explica na resposta da qual copiei a função que " PATH
já deveria estar marcado como exportado, então não é necessário reexportar". Na verdade, ainda não fiz, export
mas com a case
versão de pathprepend
tudo funciona bem. A propósito, qual é o processo pai do processo Git, é o processo Bash do qual eu uso git
?