Não há como atender a essas restrições
Parece que não há como resolver esse problema no bash com minhas restrições. Em geral, possíveis soluções são:
- Substitua
cd
,pushd
epopd
, para que qualquer comando que altere os diretórios primeiro execute a função de gancho. Mas isso pode criar problemas porque 1) a substituição deve ter o cuidado de concluir a tabulação como o comando original e retornar o mesmo código de saída e 2) se mais de uma ferramenta usar essa abordagem, eles não poderão jogar bem juntos - Substituir todos os comandos que podem ser executados com as alterações do ambiente para executar primeiro a função de gancho. Isso é difícil porque há muitos desses comandos
-
trap 'my_function
DEBUGso that every command will run the hook function. This is suboptimal because 1) it runs before every command, 2) it runs *before*
cd ', não depois de 3) só pode haver uma função de depuração, então se outra ferramenta usar essa abordagem, eles não podem jogar bem juntos - Redefina
$PROMPT_COMMAND
para executar a função de gancho primeiro. Isso é insatisfatório porque não funciona em shells não interativos e porque, se outra ferramenta definir o comando prompt, eles não poderão jogar bem juntos.
Em suma, parece que a única grande solução seria se o bash fornecesse algo como chpwd_functions
hook do zshell, mas parece impossível simular isso corretamente.