script de shell executado por xautolock mantém o valor de stall na substituição do comando

0

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.

    
por Dmitry Grigoryev 06.01.2017 / 12:20

1 resposta

1

Sim, a substituição do comando é avaliada assim que o comando xautolock é analisado, pois está entre aspas duplas.

Você terá que colocar a declaração if entre aspas simples.

Pessoalmente, eu colocaria o comando do bloqueio em um script separado.

    
por 06.01.2017 / 13:10