Para dormir o número de segundos especificado em timeout.txt
file:
#!/bin/sh
read timeout <timeout.txt
date
sleep $timeout
date
Ou usando a sintaxe bash
-específica:
#!/bin/bash
date
sleep $(<timeout.txt)
date
Eu estou querendo saber se é possível dormir em um script bash ter um tempo variável que é lido a partir de um arquivo? Eu estou querendo executar operações no script que variam em tamanho que terão os horários definidos por outro script.
Para dormir o número de segundos especificado em timeout.txt
file:
#!/bin/sh
read timeout <timeout.txt
date
sleep $timeout
date
Ou usando a sintaxe bash
-específica:
#!/bin/bash
date
sleep $(<timeout.txt)
date
Geralmente isso é apenas uma questão de colocar as informações em seu script, não tanto sobre o comando sleep.
Vamos criar um script simples 'sleepytime' para obter as informações de um arquivo (suponho que exista apenas um valor inteiro nesse arquivo):
#!/bin/bash
sleep_time_X=$(cat "X.sleepytime")
sleep_time_Y=$(cat "Y.sleepytime")
echo "Going to sleep $sleep_time_X second(s)"
sleep $sleep_time_X
echo "Going to sleep $sleep_time_Y second(s)"
sleep $sleep_time_Y
então no prompt de comando:
$ touch Y.sleepytime
$ touch X.sleepytime
$ echo "1" > X.sleepytime
$ echo "2" > Y.sleepytime
$ ./sleepytime
Going to sleep 1 second(s)
Going to sleep 2 second(s)
Mas parece que não é uma abordagem geralmente aplicável. O tempo de suspensão pode depender de fatores fora de nosso controle (por exemplo, solicitações de rede, downloads etc.). Então seria preferível esperar até que o trabalho seja feito. Isso pode ser feito com o comando wait
. Vamos criar um script adicional que chame nosso script de suspensão acima:
#!/bin/bash
# Call the sleep script and send it to background (with '&')
./sleepytime &
echo "Waiting for sleepyhead"
wait
A saída é:
Waiting for sleepyhead
Going to sleep 1 second(s)
Going to sleep 2 second(s)
Observe que a saída do primeiro script vem depois de "Aguardando ...". Talvez seja uma opção para você ...