Bindsym 不执行 i3wm 命令

Bindsym does not execute i3wm command

此快捷方式在 i3wm 中不起作用。它应该显示 window 打开的应用程序列表。 当按下键盘快捷键时,没有任何可见的事情发生。
bindsym $mod+space exec bash -c "/home/george/./dmenu-i3-window-jumper.sh"

但是脚本从终端运行正常。

脚本的 bash 代码:
https://github.com/minos-org/minos-desktop-tools/blob/master/tools/dmenu-i3-window-jumper

这是一个双向问题

首先是一些小配置:

  1. 我认为你在那里有一个额外的点,因为 ./ 在那个上下文中只代表它前面的文件夹(即:/home/george
  2. 您可以使用 $HOME 变量代替您的主文件夹,i3 会选择它
  3. 我认为确实不需要 bash -c,因为您的文件在第一行有 .sh 扩展名和 #!/bin/sh header,这意味着你只需要用 chmod +x 给它执行权限,它会 运行 和 bash 无论如何。

所以在综合中,你必须

chmod +x /home/george/dmenu-i3-window-jumper.sh

所以脚本可以运行而不直接调用bash, 你的 bindsym 可以简化为

bindsym $mod+space exec "$HOME/dmenu-i3-window-jumper.sh"

然后是脚本内容:

你看,在第 44 行左右,脚本会检查是否 STDIN is in a terminal,如果不是,则它会尝试将文件传输到 arg 数组

if [ ! -t 0 ]; then
    #add input comming from pipe or file to $@
    set -- "${@}" $(cat)
fi

这似乎是主要问题,因为您没有 运行 在终端中执行命令,也没有给它一个文件。

您的选择是 A:更改 if 以便它始终将空字符串传递给参数数组

if [ ! -t 0 ]; then
    #add input comming from pipe or file to $@
    set -- "${@}" ""
fi

或 B:使用 touch ~/dummy 创建一个虚拟文件,然后将其传递给 bindsym

上的脚本
bindsym $mod+space exec "$HOME/dmenu-i3-window-jumper.sh < $HOME/dummy"

两者在我的设置中似乎都运行良好,祝你好运!