Я пытаюсь написать простой сценарий, переводящий мой компьютер в спящий режим, если он работает от батареи без присмотра. У меня есть этот простой сценарий:
#!/bin/sh
if [ `cat /sys/class/power_supply/ADP1/online` -eq 0 ]; then
cat /sys/class/power_supply/ADP1/online; # actual sleep command goes here
fi
Когда я запускаю его с xautolock -time 1 -noclose -locker /path/to/script.sh
, он работает, как ожидалось, печатая нули каждую минуту, когда AC отключен и сижу неподвижно, если я перемещаю мышь или подключаю адаптер питания. Все идет нормально.
Однако по неизвестной причине мне не удалось заставить это работать как однострочное:
xautolock -time 1 -noclose -locker "if [ `cat /sys/class/power_supply/ADP1/online` -eq 0 ]; then cat /sys/class/power_supply/ADP1/online; fi"
Вот пример вывода:
0 # I start with the charger disconnected
0
0 # Here I connect the charger
1
1
^C
Как видите, значение в / sys / class / power_supply / ADP1 / online
изменяется, как ожидалось, но условие, кажется, сохраняет исходное значение. Точно так же, если я запускаю сценарий при подключенном питании переменного тока, впоследствии ничего не печатается в терминале.
Похоже, подстановка команды выполняется только в первый раз, а результат используется повторно. Есть ли разумное объяснение того, почему это происходит?
PS. Я пробовал альтернативный синтаксис подстановки $ ()
с теми же результатами.
Да, подстановка команды оценивается, как только команда xautolock
анализируется, поскольку она заключена в двойные кавычки.
Вы должны заключить оператор if в одинарные кавычки.
Лично я бы выделил команду шкафчика отдельным скриптом.