我有以下 ~/.bash_profile
[[ -f ~/.bashrc ]] && . ~/.bashrc
和 ~/.bashrc
### Check for shell interactivity.
if [[ $- != *i* ]] ; then
return
fi
### Nyan-cat prompt.
PS1="\`if [ \$? = 0 ]; then echo \[\e[35m\]^_^\[\e[0m\]; else echo \[\e[31m\]O_O\[\e[0m\]; fi\` \$ "
### PATH
export PATH=$PATH:$HOME/bin
因此,当我从终端运行 emacs 时一切正常。当我使用dmenu
(getenv "PATH")启动它时,exec-path
变量不包含~/bin
目录。
当我在 xfce 中使用xfrun4
具有相同 bash 配置的命令执行此操作时,一切接缝也正常工作。
dmenu 有什么问题?
答案1
我修复了编辑文件时出现的问题~/.xsession
。在运行 dwm 之前,添加以下内容。
export PATH=$PATH:$HOME/bin
现在您可以从.bashrc
文件中删除相同的行。
答案2
TERM=dumb 在 emacs shell 中,所以它永远无法通过 .bashrc 顶部的交互式测试,并且 .bash_profile 也不会在 emacs 中运行。
尝试将您认为在非交互模式下可以安全运行的内容(不会影响 rsync、git、远程 ssh 命令、cron 作业等的环境变量)移动到交互模式测试上方,它会返回脚本的顶部。
答案3
显然,dmenu 不是登录 shell,因此 .bashrc 中的内容不会运行。通常这很好,因为如果您没有仔细检查交互式会话和非交互式会话,这可能会减慢速度或产生有趣的行为。
那么在 dmenu 启动某项操作之前运行哪些 rc 文件?这在一定程度上取决于您的操作系统如何设置。实质上,您可能会考虑尝试以下几个文件:
.profile
.bash_profile
.xprofile
.xinitrc
.xsession
.xsessionrc
我还没有尝试过所有这些,但是对我来说,从 tty 登录运行 i3wm,.xinitrc 可以工作,因为它startx
在我的之后运行,并且我可以在最后.bash_profile
运行之前将任何我想要添加到我的环境中的内容放入其中;即,在我的图形会话开始之前运行任何内容。exec i3
.xinitrc
对于许多使用图形会话管理器作为登录屏幕的用户来说,我认为这.xsession
可能是一个更好的选择。您可能需要尝试我列出的几个不同的文件,但您应该能够找到一个有效的文件。
(对于那些感兴趣的人,这是我解决在非 KDE 中运行的 KDE 程序中图标消失的方法:设置主题后,可以在 中指定它.xinitrc
,例如QT_QPA_PLATFORMTHEME=qt5ct
)。