我想~/.local/bin/test.sh
通过运行 shell 脚本dmenu
。如果我运行dmenu
并$mod+D
浏览该条目,test.sh
我找不到它。
该路径~/.local/bin
已设置为我的$PATH
变量~/.profile
$ echo $PATH
/home/ubuntu/bin:/home/ubuntu/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
我也删除~/.cache/dmenu_run
并重新启动i3。我该如何通过 dmenu 启动测试脚本?
答案1
删除~/.cache/dmenu_run
或~/dmenu_cache
,具体取决于您拥有的内容,然后重新登录。登录后从 .profile 重新加载 PATH 后,dmenu 应从 $PATH 重新生成缓存。 dmenu 似乎不擅长更新自己的缓存,有时需要强制执行此操作。
另请检查您是否已启用脚本的可执行位:
$ ls -l ~/.local/bin/test.sh
-rwxrwxrwx 1 user group 152 Jan 11 04:09 /home/user/.local/bin/test.sh
答案2
我发布了完整的算法:
- 将环境变量放在
~/.profile
or~/.xprofile
(如果不存在则创建),而不是~/.bashrc
rm -f ~/.cache/dmenu_run
- 注销并登录
要调试环境变量,请输入:
- 在 d 菜单中:
echo $PATH > /tmp/path
- 在终端中:
cat /tmp/path
答案3
我有同样的问题。
这个 Arch Linux 论坛帖子描述问题:
在 ~/.bashrc 中设置 $PATH 并不能确保您的 WM/dmenu 继承此环境。
一个更相关的问题是“你如何登录?”通常,在 ~/.bash_profile 或 ~/.profile 中导出的 env 在您的 X 应用程序中可用。
像平常一样启动 dmenu_run,然后在 dmenu 中,
echo $PATH > /tmp/path
在终端中键入 Then,cat /tmp/path
以查看 $PATH 是什么。
~/.profile
就我而言, dmenu 没有选择我中设置的 $PATH 目录。我的窗口管理器是从 .xinitrc 启动的,并在该行修复问题export PATH=$PATH:/dir/of/interest
之前在 .xinitrc 文件中添加一个附加内容。exec my_wm
不过它有点笨重。
如前所述,我必须删除该~/.cache/dmenu_run
文件并在进行更改后重新登录才能使其正常工作。
答案4
不是解决此问题的最佳方法,但唯一对我有用的方法
在 ~/.config/i3/config 中替换
bindsym $mod+d exec --no-startup-id dmenu_run
和
bindsym $mod+d exec --no-startup-id "export PATH=~/.local/bin:$PATH; dmenu_run"
rm ~/.cache/dmenu_run && i3-msg reload
可以从 dmenu 访问 ~/.local/bin 中的二进制文件之后