Я хочу сделать сценарий в своем 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)
Это - улучшение на ответ 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
, если Вы не должны. Кроме того, заключите свои переменные в кавычки!
Чтобы получить вывод выполненной команды, вам нужно использовать 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
Я записал контролирующий сценарий для 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"}'