运行 Emacs 时,dmenu 不会根据我的 .bash_profile 设置环境变量

运行 Emacs 时,dmenu 不会根据我的 .bash_profile 设置环境变量

我有以下 ~/.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)。

相关内容