Сценарий оболочки, запускаемый xautolock, сохраняет значение остановки в подстановке команд

Я пытаюсь написать простой сценарий, переводящий мой компьютер в спящий режим, если он работает от батареи без присмотра. У меня есть этот простой сценарий:

#!/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. Я пробовал альтернативный синтаксис подстановки $ () с теми же результатами.

0
06.01.2017, 13:20
1 ответ

Да, подстановка команды оценивается, как только команда xautolock анализируется, поскольку она заключена в двойные кавычки.

Вы должны заключить оператор if в одинарные кавычки.

Лично я бы выделил команду шкафчика отдельным скриптом.

1
28.01.2020, 02:46

Теги

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