Скрипт BASH для масштабирования частоты ЦП

Скрипт BASH для масштабирования частоты ЦП

Я написал скрипт, который запускается при запуске моего ПК и должен перезаписывать «energy_performance_preference» и «scaling_governor» на значения, имеющие другие значения.

Происходит то, что по какой-то причине выполняется только первая команда. У меня есть похожий скрипт для чего-то другого, который использует тот же процесс открытия konsole и запуска нескольких команд подряд как root.

Вот мой сценарий на данный моментCPU_Boost.

ВидетьМасштабирование частоты ЦПЧтобы получить больше информации.

решение1

по какой-то причине выполняется только первая команда

Это потому, что у вас есть следующее:

konsole -e sudo cp -f /home/austin/CPU_Boost/energy_performance_preference /sys/devices/system/cpu/cpufreq/policy0/; cp -f /home/austin/CPU_Boost/scaling_governor /sys/devices/system/cpu/cpufreq/policy0/; chown root:root /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference; chmod 444 /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference; [...]

Bash разделяет команды точкой с запятой (не символом новой строки), поэтому выполняемый код выглядит примерно так (показано с одной командой на строку):

konsole -e sudo cp -f /home/austin/CPU_Boost/energy_performance_preference /sys/devices/system/cpu/cpufreq/policy0/
cp -f /home/austin/CPU_Boost/scaling_governor /sys/devices/system/cpu/cpufreq/policy0/
chown root:root /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference
chmod 444 /sys/devices/system/cpu/cpufreq/policy0/energy_performance_preference
[...]

Вам также повезло, что konsole"перехватит все следующие аргументы, переданные в Konsole" [ссылка] - большинство команд этого не делают, вместо этого принимая sudoв качестве параметра -eи пытаясь обработать cp, -f, /home/austin/...как другие аргументы командной строки.


cpне совсем подходит для использования с записью в sysfs... даже если это работает. Вы, скорее всего, добьетесь успеха с перенаправлением или tee.

Например, если ваш scaling_governorфайл содержит текст performance, то вы можете сделать следующее:

echo "performance" | sudo tee /sys/devices/system/cpu/cpufreq/policy0/scaling_governor

Тогда не было бы необходимости в последующем chownили chmod. Это три команды сводятся к одной.


Вы делаете это один раз для каждого из policy0, policy1, policy2и policy3. Как насчет следующего:

sudo tee /sys/devices/system/cpu/cpufreq/policy*/scaling_governor <<<"performance"

Это четыре повторения для одного вызова tee— и он даже автоматически подстраивается под разные системы (в моей системе 8 политик, а не 4).

Повторите это еще раз для energy_performance_preferenceзначения, которое вы хотели бы использовать.


А что касается того, чтобы он отображался в konsole... он вам нужен? Разве вы не можете просто запустить его как скрипт bash?

Возможно, если вы действительно этого хотите, вы могли бы использовать следующую команду/ярлык для запуска скрипта:

konsole -e "${PATH_TO_SCRIPT}"

Связанный контент