Como controlar o loop?

Como controlar o loop?

Digamos que temos "for loop" como segue:

#!/bin/bash
for i in $(cat test_file); do 
echo $i
done

O conteúdo do arquivo de texto são nomes de pastas em uma pasta pai

Se o text_file contém 10.000 entradas (ou seja, variável i), como posso dizer ao "for loop" para dormir 10 segundos entre cada 10 "ecos". Em outras palavras, quando o loop for lê a variável i no text_file, como posso controlar o número de variáveis ​​que o loop for pode executar a cada período específico de tempo? Então a saída é a seguinte:

   Variable #1
   Variable #2
   Variable #3
   .
   .
   .
   .
   sleep 10
    Variable #11
    Variable #12
    Variable #13
   .
   .       .

Responder1

Use o seguintefestaroteiro (dormir 10 segundos entre cada 10 "ecos"):

test.shé um nome de teste do script

#!/bin/bash
while ((++i)); read -r line
do
    echo "$line"
    if (( "$i" % 10 == 0)) 
    then
        sleep 10
    fi
done < $1

Uso:

bash test.sh test_file

while ((++i))- incrementará io contador cada vez que read -r lineretornar uma linha da entrada

if (( "$i" % 10 == 0))- verifica se o número da linha atual ié divisível por 10(significa que o fluxo de execução atinge as próximas 10 linhas)

sleep 10- pausa o script por 10 segundos

Responder2

xargs -L 10 sh -c 'printf "%s\n" "$@"; sleep 10' sh < test_file

Trabalhando

  • xargswith -Lpegará 10 linhas de uma só vez e as passará para o sh -ccomando. Lá o primeiro argumento é consumido como nome do programa, colocaremos um nome fictício sh. Então essas 10 linhas ficarão disponíveis shcomo "$@" e poderemos fazer o que quisermos. Aqui nós apenas os imprimimos. Então nós sleeppor 10 segundos. Depois disso, xargspassaremos as próximas 10 parcelas e este ciclo se repetirá até que acabe o número de mentiras em test_file.

informação relacionada