Posso confirmar isso para for i in *.txt; do echo "$i"; sleep 0.5 ; done(GNU bash, versão 4.2.53)
Hauke Laging
Respostas:
10
Ctrl-Zsuspende o processo atualmente em execução. Em expressão
for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done
todos os comandos exceto convert(ou seja for, in, doe done) são bash's palavras-chave que funcionam no shell atual e shell não pode suspender-se (e não é a sua intenção de qualquer maneira). Portanto, quando você pressiona Ctrl-Ze o comando é convertsuspenso, o loop simplesmente sai, pois não há mais o que processar.
Se você deseja suspender o loop inteiro, basta executá-lo no ambiente do subshell:
(for i in ull-*.pbm;do convert "$i""tmp2/$i.pdf";done)
O único shell que conheço que é capaz de suspender todo o loop no shell atual é zsh.
Não, ele Ctrl-Zpode simplesmente suspender a instância de conversão, não há razão para que o loop não possa continuar e iniciar outra. Por algum motivo, bashinterrompe o loop. Quando eu testo no dashloop, outras conchas provavelmente fazem o mesmo.
Graeme
6
@Graeme continuar o loop com uma iteração suspensa parece perigoso para mim, pois o próximo passo pode depender do anterior. A única solução razoável para mim é suspender o loop inteiro e isso pode ser feito em sub- zshshell (na verdade, é capaz de suspender o loop inteiro em execução no shell atual).
jimmij
3
Essa é provavelmente a resposta - os bashdesenvolvedores provavelmente tiveram a mesma opinião que você. Porém, continuar o loop ainda é o que eu esperava, quando você interrompe o processo e devolve o controle ao shell, parece natural que ele continue de onde parou (e provavelmente seria o comportamento bashse eles não adicionassem código para fazer outra coisa).
for i in *.txt; do echo "$i"; sleep 0.5 ; done
(GNU bash, versão 4.2.53)Respostas:
Ctrl-Z
suspende o processo atualmente em execução. Em expressãotodos os comandos exceto
convert
(ou sejafor
,in
,do
edone
) sãobash
's palavras-chave que funcionam no shell atual e shell não pode suspender-se (e não é a sua intenção de qualquer maneira). Portanto, quando você pressionaCtrl-Z
e o comando éconvert
suspenso, o loop simplesmente sai, pois não há mais o que processar.Se você deseja suspender o loop inteiro, basta executá-lo no ambiente do subshell:
O único shell que conheço que é capaz de suspender todo o loop no shell atual é
zsh
.fonte
Ctrl-Z
pode simplesmente suspender a instância de conversão, não há razão para que o loop não possa continuar e iniciar outra. Por algum motivo,bash
interrompe o loop. Quando eu testo nodash
loop, outras conchas provavelmente fazem o mesmo.zsh
shell (na verdade, é capaz de suspender o loop inteiro em execução no shell atual).bash
desenvolvedores provavelmente tiveram a mesma opinião que você. Porém, continuar o loop ainda é o que eu esperava, quando você interrompe o processo e devolve o controle ao shell, parece natural que ele continue de onde parou (e provavelmente seria o comportamentobash
se eles não adicionassem código para fazer outra coisa).