Estou tendo problemas para encontrar a combinação certa de ponto e vírgula e / ou chaves. Eu gostaria de fazer isso, mas como uma linha da linha de comando:
while [ 1 ]
do
foo
sleep 2
done
bash
loops
while-loop
Brian Deacon
fonte
fonte
Respostas:
A propósito, se você digitar como uma multilinha (como está sendo exibida) no prompt de comando e chamar o histórico com a seta para cima, você o encontrará em uma única linha, corretamente pontuada.
fonte
cmdhist
opção se você estiver usando o bash?while true; do sh /Users/myuser/bin/vpn ; done
Também é possível usar o comando sleep na condição while. Fazendo uma linha parecer mais limpa.
fonte
while echo thinking ; do sleep 2 ; done
Claro, se o [enquanto] comando falhar, o loop termina, então você teria quewhile echo thinking || true ; do sleep 2 ; done
mas então você está de volta parawhile true ; ...
O cólon é sempre "verdadeiro":
fonte
: [arguments]
Sem efeito; o comando não faz nada além de expandir argumentos e executar redirecionamentos especificados. Um código de saída zero é retornado.Você pode usar ponto e vírgula para separar instruções:
fonte
Você também pode fazer uso do
until
comando:Observe que, ao contrário de
while
,until
executaria os comandos dentro do loop, desde que a condição de teste tenha um status de saída que não seja zero.Usando um
while
loop:Usando um
for
loop:Outra maneira de usar
until
:fonte
until ((0)); do foo; sleep 2; done
parece não funcionar. É infinito contínuo.Um loop infinito muito simples .. :)
Na sua pergunta, seria:
fonte
Gosto de usar o ponto-e-vírgula apenas para a instrução WHILE e o operador && para fazer o loop fazer mais de uma coisa ...
Então eu sempre faço assim
fonte
&&
no loop é o mesmo de qualquer outro momento, não é mesmo. Você precisa que a segunda coisa aconteça apenas se a primeira acontecer, e use&&
outra coisa;
é suficiente. Realmente, você deseja manter o conteúdo desse loop curto e simples, idealmente apenas um comando, para uma função ou um script.Para uso simples processo de observação
watch
, em vezfonte
Usando
while
:Usando
for
Loop:Usando
Recursion
(um pouco diferente do anterior, a interrupção do teclado não o interrompe)fonte
Se você deseja que o loop while pare após alguma condição e seu
foo
comando retorne diferente de zero quando essa condição for atendida, você poderá fazer com que o loop quebre assim:Por exemplo, se o
foo
comando estiver excluindo itens em lotes e retornará 1 quando não houver mais nada a ser excluído.Isso funciona bem se você tiver um script personalizado que precise executar um comando várias vezes até alguma condição. Você escreve o script para sair
1
quando a condição for atendida e sair0
quando deve ser executado novamente.Por exemplo, digamos que você tenha um script python
batch_update.py
que atualize 100 linhas em um banco de dados e retorne0
se houver mais a atualizar e1
se não houver mais. O comando a seguir permitirá que você atualize as linhas 100 por vez, com suspensão por 5 segundos entre as atualizações:fonte
foo
comando sair com código1
quando deseja que o loop while seja interrompido. Atualizei minha resposta com um exemplo.Se eu posso dar dois exemplos práticos (com um pouco de "emoção").
Isso grava o nome de todos os arquivos terminados com ".jpg" na pasta "img":
Isso os exclui:
Apenas tentando contribuir.
fonte
ls -1 *.jpg
erm *.jpg
Você pode tentar isso também AVISO: isso você não deve fazer, mas como a pergunta está pedindo um loop infinito sem fim ... é assim que você poderia fazê-lo.
fonte