
Я написал скрипт, который запускается при запуске моего ПК и должен перезаписывать «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}"