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 $OLDPWD
y $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 cd
imprimirá un mensaje sobre por qué stderr, y contará break
con un código de salida distinto de cero si su command
ejecución no es exitosa o si la ejecución command
afecta 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
.