O seu problema está na cotação.
Você está basicamente configurando sua variável PS1
como
PS1="$(myfunction)"
(exportar PS1
não é necessário, pois é o shell atual que está usando apenas).
Isso chamará myfunction
no momento da atribuição a PS1
e a função nunca mais será chamada.
Em vez disso, você deve usar
PS1='$(myfunction)'
Isso faria com que myfunction
fosse chamado toda vez que o prompt fosse exibido.
Nenhuma citação especial é necessária na função em si.
Sua função:
function GIT_BRANCH() {
STATUS="\$(git status 2> /dev/null)";
if [[ ! ${STATUS} ]]; then
if [[ ! ${STATUS} = *"working tree clean"* ]]; then
echo "not clean repo";
else
echo "clean repo";
fi
else
echo "not a repo";
fi
}
Isso pode ser reescrito como
GIT_BRANCH () {
local status="$( git status --porcelain 2>&1 )"
case "$status" in
*"fatal: not a git repository"*)
echo 'Not a repo' ;;
"")
echo 'Clean repo' ;;
*)
echo 'Not clean repo' ;;
esac
}
Ou usando as declarações if
:
GIT_BRANCH () {
local status="$( git status --porcelain 2>&1 )"
if [[ "$status" == *"fatal: not a git repository"* ]]; then
echo 'Not a repo'
elif [[ -z "$status" ]]; then
echo 'Clean repo'
else
echo 'Not clean repo'
fi
}