Eu estou tentando fazer um script simples para colocar meu computador para dormir se ele for executado em bateria autônoma. Eu tenho este script simples:
#!/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
Quando eu o executo com xautolock -time 1 -noclose -locker /path/to/script.sh
, ele funciona como esperado, imprimindo zeros a cada minuto quando a CA é desconectada e fica parado quando movo o mouse ou conecto o adaptador de energia. Até aí tudo bem.
No entanto, por uma razão desconhecida, eu não consigo fazer isso funcionar como uma única linha:
xautolock -time 1 -noclose -locker "if [ 'cat /sys/class/power_supply/ADP1/online' -eq 0 ]; then cat /sys/class/power_supply/ADP1/online; fi"
Aqui está um exemplo de saída:
0 # I start with the charger disconnected
0
0 # Here I connect the charger
1
1
^C
Como você pode ver, o valor em /sys/class/power_supply/ADP1/online
é alterado conforme o esperado, mas a condição parece manter o valor inicial. Da mesma forma, se eu iniciar o script com a energia AC conectada, nada será impresso no terminal posteriormente.
Parece que a substituição do comando é avaliada apenas na primeira vez, e a saída é reutilizada posteriormente. Existe uma explicação razoável do porquê isso está acontecendo?
PS. Eu tentei a sintaxe de substituição alternativa $()
, com os mesmos resultados.