.bashrc - если справка оператора

Я хочу сделать сценарий в своем bashrc, чтобы сказать мне, каков мой временный файл ЦП, ЕСЛИ это по 60C. Если это находится под этим, я хочу, чтобы это ничего не сказало. До сих пор у меня есть это:

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

Помощь? Я планирую добавить это к своему .bashrc, таким образом, он уведомляет, если мой временный файл ЦП высок, когда я открываю терминал.

Обновление: вывод от 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)
1
задан 4 November 2016 в 08:56

3 ответа

Это - улучшение на ответ 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]+ 

, Почему Ваш не будет работать:

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

Это сравнивает две строки, но говорит Bash рассматривать их как целые числа, следовательно почему ошибка является "ожидаемым целым выражением". Необходимо срезать строку только к числам. (См. мою функцию выше.) И так или иначе, "$STR | grep high" не выполнится, пока Вы не поместите его в замену команды как $(...).

exec $STR | grep "high"

не выполняют программу с помощью exec, если Вы не должны. Кроме того, заключите свои переменные в кавычки!

} # 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

, Почему Ваш не будет работать:

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

Это сравнивает две строки, но говорит Bash рассматривать их как целые числа, следовательно почему ошибка является "ожидаемым целым выражением". Необходимо срезать строку только к числам. (См. мою функцию выше.) И так или иначе, "$STR | grep high" не выполнится, пока Вы не поместите его в замену команды как $(...).

exec $STR | grep "high"

не выполняют программу с помощью exec, если Вы не должны. Кроме того, заключите свои переменные в кавычки!

2
ответ дан 7 December 2019 в 12:37

Чтобы получить вывод выполненной команды, вам нужно использовать backticks (`), иначе вы получите только возвращаемое значение этой команды.

Я действительно не знаю, что, по вашему мнению, делает ваш код, но я понимаю, что вы хотите, чтобы он делал. Я написал короткий сценарий, который делает то, что вы хотите. Это не очень гибко, и я не очень хорошо с REGEX, awk и sed.

Так вот что я сделал:

#!/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

Как я уже сказал, это работает, но не очень хорошим способом. Скорее всего, есть более короткий вкладыш для получения температуры.


Я забыл: Вы можете сохранить этот сценарий и предоставить разрешение на выполнение

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

И поместить /PATH/TO/SCRIPT/sciptname.sh в .bashrc

1
ответ дан 7 December 2019 в 12:37

Я записал контролирующий сценарий для sensors однажды. Ниже часть сценария, который Вы хотите:

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

Эта строка может быть включена в функцию удара и помещена в Ваш ~/.bashrc если Вы хотите выполнить его как единственную команду по требованию. В Вашем sensors вывод там два temp1 поля, таким образом, это сообщит, является ли какой-либо из них более чем 60. Вы могли изменить код для печати, как который адаптер имеет высокую температуру, так:

sensors | awk '/Adapter/{adp=$0}/temp1/ {if (substr($2,2,2)>60) print adp ": Temperature over 60 degrees"}' 
0
ответ дан 7 December 2019 в 12:37

Другие вопросы по тегам:

Похожие вопросы: