Emacs + OSX中的Bash没有找到通过terminal.app安装的gems?

dMi*_*Mix 3 ruby macos emacs bash rubygems

我正在osx上的emacs中运行bash,然后从另一个地方运行来自terminal.app的拉宝石

在bash中:

which gem
/usr/bin/gem
Run Code Online (Sandbox Code Playgroud)

在终端:

which gem
/opt/local/bin/gem
Run Code Online (Sandbox Code Playgroud)

如何更改bash以匹配终端?

rya*_*anb 7

我猜测$PATH在emacs bash shell中有所不同.您可以通过在每个命令中运行此命令来检查它.

echo $PATH
Run Code Online (Sandbox Code Playgroud)

这是用于查找命令的查找路径.您需要在其中包含/ opt/local/bin.

export PATH="/opt/local/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

将该行放在您的~/.bashrc文件中,当在emacs中使用时,它应该被bash拾取(除非它在不同的用户或其他东西下运行).


更新:

正如Singletoned在评论中提到的那样,Emacs将不会加载~/.bash_profile或者~/.profile终端将加载.此文件可能已包含此PATH定义,导致两者具有不同的行为.

我建议将PATH定义从bash_profile文件移到bashrc.但是,bashrc如果bash_profile存在,终端将不会加载.

解决方案是将其添加到~/.bash_profile.

if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi
Run Code Online (Sandbox Code Playgroud)

然后,您可以移动bashrc其中包含的所有其他内容bash_profile.