Bindsym不执行i3wm命令

时间:2019-12-11 17:56:33

标签: bash i3

此快捷方式在i3wm中不起作用。它应该显示打开的应用程序的窗口列表。 按下键盘快捷键时,什么都看不见。
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 个答案:

答案 0 :(得分:1)

这是两个方面的问题

首先介绍一些小的配置资料:

  1. 我认为您在其中有一个额外的点,因为在这种情况下./仅代表其前面的文件夹(即:/home/george
  2. 您可以使用$HOME变量作为主文件夹的代表,i3会选择它
  3. 我认为实际上不需要bash -c,因为您的文件在第一行既有.sh扩展名又有#!/bin/sh头,这意味着您只需要使用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"

两个设置都可以正常工作,祝您好运!