cd -P .
for dir in ./*/
do cd -P "$dir" ||continue
printf %s\\n "$PWD" >&2
command && cd "$OLDPWD" ||
! break; done || ! cd - >&2
El comando anterior no necesita hacer subcapas: solo realiza un seguimiento de su progreso en el shell actual alternando $OLDPWDy $PWD. Cuando cd -el shell intercambia el valor de estas dos variables, básicamente, ya que cambia los directorios. También imprime el nombre de cada directorio, ya que funciona allí para stderr.
Acabo de echarle un segundo vistazo y decidí que podría hacer un mejor trabajo con el manejo de errores. Saltará un directorio en el que no puede cd, e cdimprimirá un mensaje sobre por qué stderr, y contará breakcon un código de salida distinto de cero si su commandejecución no es exitosa o si la ejecución commandafecta de alguna manera su capacidad de regresar a su directorio original - $OLDPWD. En ese caso, también hace un cd -último, y escribe el nombre del directorio de trabajo actual resultante en stderr.
youtube-dl.