SXHKD 不会停止运行脚本

SXHKD 不会停止运行脚本

所以我在使用 SXHKD 时遇到了一些困难 - 我使用 BSPWM 运行它。我最近编写了一个脚本,它能够找到活动监视器中的所有窗口,然后从该监视器中选择所需的桌面。该脚本运行良好,但是当我尝试在 SXHKD 中使用此脚本时,一切都崩溃了。使用热键:alt + {1-9,0} 有效,但即使在我按下 alt 后仍会继续运行脚本。我将使用以下脚本:

  • SXHKDRC 位

    alt + {1,2,3,4,5,6,7,8,9,0}
    输入={1,2,3,4,5,6,7,8,9,0}; \
    回显“$input”| ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh
  • 从活动监视器获取桌面:

     #!/usr/bin/env bash
     desktops=()
     counter=1
    
     for i in $(bspc query -D -m); do
       desktops[$counter]="$i"
       counter=$(("$counter+1"))
     done
    
     select=$(cat)
    
     if [ "$select" -gt ${#desktops[@]} ] || [ "$select" -lt 1 ]; then
       return
     fi
    
     $(bspc desktop -f "${desktops[$select]}")
    

我现在有一个临时的解决方案,那就是使用pkill -USR1 -x -sxhkd,但我对此并不满意。我希望能够以最快的速度浏览我的所有窗口 - 我现在做不到,因为上次我尝试时,我的电脑崩溃了。感谢您的时间和帮助!

[编辑#1] 因此,我实施了 @Counthchrisdo 的一些代码,因为他对 bash 知识非常了解,但我仍然遇到同样的问题 - 除非我使用和弦链 alt + o。此外,请确保在 sxhkdrc 中的每一行后面都使用 ; \,否则它将不起作用。我已经替换了:

alt + {1,2,3,4,5,6,7,8,9,0}
input={1,2,3,4,5,6,7,8,9,0}; \        
echo "$input" | ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh

和:

alt + {1,2,3,4,5,6,7,8,9,0} input={1,2,3,4,5,6,7,8,9,0}; \ echo "$input" | ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh >/dev/null 2>&1 &

我猜他关闭了我打开的管道所以我认为这肯定会奏效。还有其他线索吗?

答案1

在我看来,您的脚本似乎没有正确退出,导致它在释放键绑定后仍继续执行。这是您的脚本的更新版本:

#!/usr/bin/env bash

desktops=()
counter=1

for i in $(bspc query -D -m); do
    desktops[$counter]="$i"
    counter=$((counter+1))
done

select=$(cat)

if [ "$select" -gt ${#desktops[@]} ] || [ "$select" -lt 1 ]; then
    exit 1  # Exit with an error code if the selection is out of range
fi

$(bspc desktop -f "${desktops[$select]}")

exit 0  # Exit successfully after the action is performed

所做的更改:

Added exit 1 to indicate an error if the selection is out of range.
Added exit 0 to indicate successful execution after changing the desktop.

确保脚本具有可执行权限(chmod +x script_name.sh)并更新 SXHKD 配置以正确处理脚本:

alt + {1,2,3,4,5,6,7,8,9,0}
input={1,2,3,4,5,6,7,8,9,0}
echo "$input" | ~/.config/bspwm/.scripts/get_active_monitors_desktops.sh >/dev/null 2>&1 &

此版本的脚本应在更改桌面后正常退出,从而防止其在 SXHKD 中释放键绑定后继续执行。确保将脚本输出重定向到 /dev/null 以抑制任何输出。

相关内容