所以,我正在尝试创建一个脚本,每次按下它时,我的灯的亮度会增加一定量。
目前,它的结构简单get brightness level > add 5%
(简化)。
这很好用,但我倾向于非常快速地按下按钮以快速达到20%。因为设置亮度级别超过了json命令,所以这需要半秒到一秒钟,而我每次都在等待下一级别,因为脚本在运行时不记得我的输入。
我的想法是创建一个脚本,只在脚本执行时引发变量,然后在2秒之后,获取变量,计算亮度级别,并将命令发送到灯。
现在,我正试图用2个脚本做到这一点。
每次执行时将变量设置为.ini文件,这是一个快速脚本,因此它可以跟我按下按钮。
第二个由第一个执行,从睡眠操作开始,然后从.ini文件获取变量,并执行命令。该脚本将被执行几次,但它应该忽略它,因为它仍在运行(休眠)。
我真正想要做的是将所有这些都放在一个脚本中。在我看来,它可以像这样完成(忽略它是否可以在bash中完成):
有一个脚本按第一个按钮执行,然后保持活动状态,但会记录它“尝试”执行的次数,然后采取相应的行动。
让脚本运行得很快,但只是以某种方式运行睡眠/执行部分,每次都执行变量更改部分。
如果有人知道如何做我正在尝试的事情,我会很乐意尝试。
添
答案 0 :(得分:0)
您可以使用环境变量来计算脚本被调用的次数并相应地工作。例如:
#!/bin/bash
if [ $foovariable -gt 3 ]
then
echo yes
else
echo no
foovariable=$((foovariable + 1))
export foovariable
fi
在调用脚本之前,您只需要将变量设置为给定值:
export foovariable=1
。然后,您需要使用source
或.
调用脚本,以便使用脚本导出的值获取shell中的值:source my_script.sh
。
答案 1 :(得分:0)
所以,我个人的做法(经过多次尝试):
# other parts of script
# reference thingy
(
if [[ (Get externally stored variable 'waiting') != 1 ]]; then
(Store variable 'waiting' externally with value)=1
sleep 5
echo "You can run the script as much as you want, this will only show once"
(Store variable 'waiting' externally with value)=0
fi
) &
简短说明:
括号末尾的&
使得括号之间的脚本部分在后台运行。基本上,当你的脚本到达"引用thingy"的行时,它会启动你在后台的括号之间的部分,并关闭脚本的其余部分。
外部存储的变量waiting
非常重要。您无法在本地存储它,因为(AFAIK)本地变量在脚本结束时被删除。现在,当上面的代码段在后台运行时,变量waiting
为1,这会阻止代码段在其仍在运行时再次运行。我会说简单但有效。
如果您需要一种在外部设置和获取变量的方法,可以尝试在此处查看我的其他问题:https://stackoverflow.com/a/34502370/5721694