.bashrc - se ajuda de instrução

1

Eu quero fazer um script no meu bashrc para me dizer qual é a temperatura da minha CPU, se é mais de 60C. Se estiver sob isso, quero que não diga nada. Até agora eu tenho isso:

STR='sensors'
if [ "$STR | grep high" -gt "temp1:        +40.1°C  (high = +70.0°C)" ]
then
    exec $STR | grep "high"
fi

Ajuda? Eu planejo adicionar isso ao meu .bashrc para que ele notifique se a temperatura da minha CPU estiver alta quando eu abrir o terminal.

Atualizar : saída de sensors :

radeon-pci-0008
Adapter: PCI adapter
temp1:        +40.0°C  (crit = +120.0°C, hyst = +90.0°C)

k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +40.5°C  (high = +70.0°C)
                       (crit = +100.0°C, hyst = +97.0°C)
    
por Freal Ackman 28.09.2016 / 09:29

3 respostas

1

Para obter a saída de um comando executado, você precisa usar backticks ('), caso contrário, você só obtém o valor de retorno desse comando.

Eu realmente não sei o que você acha que seu código faz, mas eu entendo o que você quer fazer. Eu escrevi um pequeno script que faz o que você quer. Não é muito flexível e não estou bem com o REGEX, awk e sed .

Então, foi o que eu fiz:

#!/bin/bash

# Change the adapter to your desired one
ADAPTER="k10temp"

# Extract the high temp from the string
HIGH_TEMP='sensors | grep -A5 "${ADAPTER}" | grep temp1 | awk '{print $5}' | sed -e 's/+//' -e 's/\..°.*//''

# Extract the current temp from the string and print it
CURR_TEMP='sensors | grep -A5 "${ADAPTER}" | grep temp1 | awk '{print $2}' | sed -e 's/+//' -e 's/\..°.*//''
echo "Current temperature: ${CURR_TEMP}°C"

# check if current temp is greater or equal 
if [ "${CURR_TEMP}" -ge "${HIGH_TEMP}" ]; then
   echo "Do Something to keep cool."
fi

Como eu disse, isso funciona, mas não de uma maneira muito boa. Provavelmente há um liner mais curto para obter as temperaturas.

Esqueci-me: você pode salvar esse script e conceder permissão de execução

$ chmod u+x /PATH/TO/SCRIPT/sciptname.sh

Coloque o /PATH/TO/SCRIPT/sciptname.sh no seu .bashrc

    
por Kev Inski 28.09.2016 / 10:23
1

Esta é uma melhoria em resposta de Kev Inski :

#!/bin/bash
# Display CPU temperature, if it is above the "high" threshold.

# Desired adapter.
adapter="k10temp-pci-00c3"

# Extract given temperature from 'sensors'.
get_temp(){
    sensors -uA "$adapter" |
        grep "$1" |
        cut -d. -f1 |
        grep -oE '[0-9]+$'
}

# Get current temperature.
temp1_input=$( get_temp 'temp1_input' )

# Get high temperature.
temp1_high=$( get_temp 'temp1_high' )

# Compare current temp against high.
if [[ $temp1_input -ge $temp1_high ]]; then
    echo "Your CPU is ${temp1_input}°C"
fi

Por que o seu não funciona:

[ "$STR | grep high" -gt "temp1:        +40.1°C  (high = +70.0°C)" ]

Isto está comparando duas strings, mas dizendo ao Bash para tratá-las como inteiros, daí porque o erro é "expressão inteira esperada". Você precisa reduzir a string para apenas os números. (Veja minha função acima.) E de qualquer forma, "$STR | grep high" não será executado até que você o coloque em uma substituição de comando como $(...) .

exec $STR | grep "high"

Não execute um programa usando exec , a menos que seja necessário. Além disso, cite suas variáveis!

    
por wjandrea 04.11.2016 / 07:53
0

Eu escrevi um script de monitoramento para sensors uma vez. Abaixo está parte do script que você deseja:

sensors | awk '/temp1/ {if (substr($2,2,2)>60) print "Temperature over 60 degrees"}'

Esta linha pode ser incluída em uma função bash e colocada em seu ~/.bashrc se você desejar executá-la como um único comando sob demanda. Na sua saída sensors , existem dois campos temp1 , por isso, informará se algum deles tiver mais de 60. Você pode modificar o código para imprimir qual adaptador possui alta temperatura, assim:

sensors | awk '/Adapter/{adp=$0}/temp1/ {if (substr($2,2,2)>60) print adp ": Temperature over 60 degrees"}' 
    
por Sergiy Kolodyazhnyy 24.11.2016 / 23:52