cd -P .
for dir in ./*/
do cd -P "$dir" ||continue
printf %s\\n "$PWD" >&2
command && cd "$OLDPWD" ||
! break; done || ! cd - >&2
O comando acima não precisa fazer nenhum subshells - apenas rastreia seu progresso no shell atual alternando $OLDPWDe $PWD. Quando cd -o shell troca o valor dessas duas variáveis, basicamente, à medida que altera os diretórios. Ele também imprime o nome de cada diretório, pois trabalha lá para stderr.
Acabei de dar uma segunda olhada e decidi que poderia fazer um trabalho melhor com o tratamento de erros. Irá pular um diretório no qual não pode cd- e cdimprimirá uma mensagem sobre o motivo de stderr - e exibirá breakum código de saída diferente de zero se o seu commandnão for executado com êxito ou se a execução commandafetar de alguma forma a capacidade de retornar ao diretório original - $OLDPWD. Nesse caso, ele também faz uma cd -última - e grava o nome do diretório de trabalho atual resultante no stderr.
youtube-dl.