Como manter o código rodando em um script [duplicado]

1

Eu tenho um script simples que exibe o uso de memória atual, o uso do disco e a carga da CPU dentro de um terminal. Aqui está o código para que você possa ver o que quero dizer:

free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'

df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'

top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n", $(NF-2)}'

O problema é que ele só executa esse código dentro do script 1 vez. Preciso manter automaticamente esse script a cada 1 segundo sem ter que recarregar o script. Então, basicamente, eu só quero em algum tipo de loop contínuo, enquanto o script pode fazer outras coisas.

O motivo pelo qual eu quero continuar atualizando a cada 1 segundo é porque ele só mostra o uso da CPU 1 vez quando você executa o script, mas a CPU muda com frequência, então preciso continuar exibindo os dados atuais.

    
por iamr00t 21.07.2017 / 20:43

1 resposta

2

Você pode usar o loop while:

while :
do
    free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
    df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'   
    top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n",$(NF-2)}'  
    sleep 1
done

: é um comando interno que sempre retorna true

se você preferir algo mais legível, pode usar true:

while true
do
    free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
    df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'   
    top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n",$(NF-2)}'  
    sleep 1
done

você pode obter mais informações sobre a diferença entre ":" e "true": Qual é o propósito do: (cólon) GNU Bash embutido?

Se você quiser uma exibição limpa de informações, você pode adicionar a função clear no início do loop, como:

while :
do
    clear
    free -m | awk 'NR==2{printf " | Memory Usage: %s/%sMB (%.2f%%)|\n", $3,$2,$3*100/$2 }'
    df -h | awk '$NF=="/"{printf " | Disk Usage: %d/%dGB (%s) |\n", $3,$2,$5}'   
    top -bn1 | grep load | awk '{printf " | CPU Load: %.2f |\n",$(NF-2)}'  
    sleep 1
done
    
por 21.07.2017 / 21:05