将键盘快捷键绑定到 bash 功能以中断睡眠?
Bind keyboard shortcut to bash function to interrupt sleep?
我有一组 .jpg 背景图像,想用作我的 i3-gaps 桌面的背景。目前,我的墙纸 i3 配置文件中有这两行。
exec --no-startup-id randomwallpaper
bindsym $mod+i exec --no-startup-id feh --bg-scale --randomize /home/user/Pictures/bgart/*.jpg
这是我的随机壁纸脚本。它使用 feh 设置图像并使用 wal 创建基于它的配色方案。
#!/bin/bash
cd /home/user/Pictures/bgart
for file in $(ls); do
shopt -s nullglob
for i in *.jpg; do
feh --bg-scale --randomize /home/user/Pictures/bgart/$i
wal -q -i $i
sleep 300
done
done
启动时,随机壁纸启动,每 5 分钟壁纸随颜色方案变化。不过,我也可以按 Win+I 手动切换到随机壁纸。是否可以添加某种触发器来中断循环?也许将脚本作为一个函数并添加一个键来调用它?这样,我就可以拥有上面的脚本 运行,如果我对墙纸感到厌倦,我可以使用 Win+I 切换到另一个,并且在 5 分钟后仍然可以更改。
除非你用内置睡眠修改了你的 bash
,否则你可以终止睡眠命令。然后脚本将继续执行下一个命令,就好像 sleep
正常终止一样。唯一棘手的部分是确定要杀死的正确进程。这里我假设你的系统上只有一个 randomwallpaper
进程 运行:
exec --no-startup-id randomwallpaper
bindsym $mod+i exec --no-startup-id sh -c 'pkill -P $(pgrep -ox randomwallpaper) sleep'
顺便说一句;您的脚本可以使用一些改进。例如,变量 file
未使用,并且 --randomize
无效,因为您只提供了一张图片。
#!/bin/bash
shopt -s nullglob
cd /home/user/Pictures/bgart
while true; do
i=$(shuf -en1 ./*.jpg)
if [ -n "$i" ]; then
feh --bg-scale "$i"
wal -q -i "$i"
fi
sleep 300
done
我有一组 .jpg 背景图像,想用作我的 i3-gaps 桌面的背景。目前,我的墙纸 i3 配置文件中有这两行。
exec --no-startup-id randomwallpaper
bindsym $mod+i exec --no-startup-id feh --bg-scale --randomize /home/user/Pictures/bgart/*.jpg
这是我的随机壁纸脚本。它使用 feh 设置图像并使用 wal 创建基于它的配色方案。
#!/bin/bash
cd /home/user/Pictures/bgart
for file in $(ls); do
shopt -s nullglob
for i in *.jpg; do
feh --bg-scale --randomize /home/user/Pictures/bgart/$i
wal -q -i $i
sleep 300
done
done
启动时,随机壁纸启动,每 5 分钟壁纸随颜色方案变化。不过,我也可以按 Win+I 手动切换到随机壁纸。是否可以添加某种触发器来中断循环?也许将脚本作为一个函数并添加一个键来调用它?这样,我就可以拥有上面的脚本 运行,如果我对墙纸感到厌倦,我可以使用 Win+I 切换到另一个,并且在 5 分钟后仍然可以更改。
除非你用内置睡眠修改了你的 bash
,否则你可以终止睡眠命令。然后脚本将继续执行下一个命令,就好像 sleep
正常终止一样。唯一棘手的部分是确定要杀死的正确进程。这里我假设你的系统上只有一个 randomwallpaper
进程 运行:
exec --no-startup-id randomwallpaper
bindsym $mod+i exec --no-startup-id sh -c 'pkill -P $(pgrep -ox randomwallpaper) sleep'
顺便说一句;您的脚本可以使用一些改进。例如,变量 file
未使用,并且 --randomize
无效,因为您只提供了一张图片。
#!/bin/bash
shopt -s nullglob
cd /home/user/Pictures/bgart
while true; do
i=$(shuf -en1 ./*.jpg)
if [ -n "$i" ]; then
feh --bg-scale "$i"
wal -q -i "$i"
fi
sleep 300
done