Você pode definir uma variável no script que inicia fish para observar que você está "em fish ":
export IN_FISH=yes
Então, antes disso, você verifica se já está definido:
if [ "${IN_FISH}" != "yes" ]; then
export IN_FISH=yes
fish # replace with the command you use to start fish
fi
Assim, no seu primeiro bash , IN_FISH não está definido, por isso é definido e fish é iniciado. Quando você inicia bash de FISH, IN_FISH já está definido, então bash não inicia fish novamente ...