xautolock 运行的 shell 脚本在命令替换中保留停顿值

xautolock 运行的 shell 脚本在命令替换中保留停顿值

我正在尝试制作一个简单的脚本,让我的计算机在无人看管的情况下依靠电池运行时进入睡眠状态。我有这个简单的脚本:

#!/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,它按预期工作,在断开交流电源时每分钟打印零,并且在我移动鼠标或连接电源适配器时保持静止。到目前为止,一切都很好。

然而,由于未知的原因,我无法将其作为一句台词工作:

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按预期变化,但条件似乎保持初始值。同样,如果我在连接交流电源的情况下启动脚本,则之后终端中不会打印任何内容。

看起来命令替换仅在第一次进行评估,之后会重用输出。对于为什么会发生这种情况有合理的解释吗?

附言。我尝试了替代替换语法$(),得到了相同的结果。

答案1

是的,命令替换在xautolock命令被解析后立即被评估,因为它在双引号内。

您必须将 if 语句放在单引号中。

就我个人而言,我会将 locker 命令放在单独的脚本中。

相关内容