for i in ull-*.pbm;do convert $i tmp2/$i.pdf ;done
Estoy Ctrl-Zen medio de la carrera, y luego fgsu identificación de trabajo. Pero las iteraciones restantes no continúan terminando. ¿Me pregunto porque?
Puedo confirmar eso para for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, Versión 4.2.53)
Hauke Laging
Respuestas:
11
Ctrl-Zsuspende el proceso actualmente en ejecución. En expresión
for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done
todos los comandos excepto convert(es decir for, in, doy done) son bashpalabras clave 's que se ejecutan en el shell actual y la cáscara no puede suspender en sí (y no es su intención de todos modos). Entonces, cuando golpeas Ctrl-Zy el comando se convertsuspende, el bucle simplemente se cerrará ya que ya no hay nada que procesar.
Si desea poder suspender todo el ciclo, simplemente ejecútelo en el entorno de subshell:
(for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done)
El único shell que sé que es capaz de suspender todo el ciclo en el shell actual es zsh.
No, Ctrl-Zsimplemente podría suspender una instancia de conversión, no hay ninguna razón por la cual el ciclo no pueda continuar e iniciar otra. Por alguna razón bashdetiene el ciclo. Cuando la prueba en dashel bucle continúa, otros shells probablemente hagan lo mismo.
Graeme
66
@Graeme continuar el ciclo con una iteración suspendida me parece peligroso ya que el siguiente paso puede depender del anterior. La única solución razonable para mí es suspender todo el ciclo y podría hacerse en subshell (en realidad zshes capaz de suspender todo el ciclo que se ejecuta en el shell actual).
jimmij
3
Esa es probablemente la respuesta: los bashdesarrolladores probablemente tuvieron la misma opinión que usted. Sin embargo, continuar con el ciclo sigue siendo lo que hubiera esperado, cuando detiene el proceso y devuelve el control manual al shell, parece natural que continúe donde lo dejó (y probablemente sería el comportamiento bashsi no agregaran código para hacer otra cosa).
for i in *.txt; do echo "$i"; sleep 0.5 ; done
(GNU bash, Versión 4.2.53)Respuestas:
Ctrl-Z
suspende el proceso actualmente en ejecución. En expresióntodos los comandos excepto
convert
(es decirfor
,in
,do
ydone
) sonbash
palabras clave 's que se ejecutan en el shell actual y la cáscara no puede suspender en sí (y no es su intención de todos modos). Entonces, cuando golpeasCtrl-Z
y el comando seconvert
suspende, el bucle simplemente se cerrará ya que ya no hay nada que procesar.Si desea poder suspender todo el ciclo, simplemente ejecútelo en el entorno de subshell:
El único shell que sé que es capaz de suspender todo el ciclo en el shell actual es
zsh
.fuente
Ctrl-Z
simplemente podría suspender una instancia de conversión, no hay ninguna razón por la cual el ciclo no pueda continuar e iniciar otra. Por alguna razónbash
detiene el ciclo. Cuando la prueba endash
el bucle continúa, otros shells probablemente hagan lo mismo.zsh
es capaz de suspender todo el ciclo que se ejecuta en el shell actual).bash
desarrolladores probablemente tuvieron la misma opinión que usted. Sin embargo, continuar con el ciclo sigue siendo lo que hubiera esperado, cuando detiene el proceso y devuelve el control manual al shell, parece natural que continúe donde lo dejó (y probablemente sería el comportamientobash
si no agregaran código para hacer otra cosa).