Eu não conheço um caminho embutido para conseguir isso, mas você pode adaptar um truque interessante do Unix Power Tools (item 14.14 na segunda edição). Se você estiver usando bash , defina uma função como esta
cd() {
builtin cd "$1"
PATH="$(echo $PATH | sed sX/foo/foo.foo:XXg)"
if [ "${PWD:0:4}" = "/foo" ]; then
export PATH="/foo/foo.foo:$PATH"
fi
}
(Eu não acho que é possível usar uma variante de ${PATH//} para fazer a substituição, pois o texto que estamos procurando contém / .)
Sempre que você cd estiver em algum lugar, isso fará a alteração solicitada, removerá /foo/foo.foo do caminho e, finalmente, verificará se o novo diretório atual está em /foo e adicionará /foo/foo.foo ao caminho se isto é. Ao remover /foo/foo.foo do caminho inicialmente, evitamos verificar se ele já existe antes de adicioná-lo.
Para que isso seja concluído, você precisa redefinir pushd e popd também ...