在我的Mac上的Emacs中,`编译命令`如何在〜/ .bashrc中看到PATH设置?


0

在我的Mac OSX Mavericks上的Emacs v23.4.1中,怎么能 Meta-x compile 看到 $PATH 对于我的〜/ .bashrc中设置的bash?马上, PATH=/usr/bin:/bin:/usr/sbin:/sbin 而在正常的外壳中它是 PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/adt-bundle-mac-x86_64-20130522/sdk/tools:/Applications/adt-bundle-mac-x86_64-20130522/sdk/platform-tools:/Applications/adt-bundle-mac-x86_64-20130522/sdk/tools:/Applications/adt-bundle-mac-x86_64-20130522/sdk/platform-tools

令人惊讶的是,路过 bash -c "echo $PATH" 到了 Compile Command 仍然给 /usr/bin:/bin:/usr/sbin:/sbin

为什么Emacs没有使用我的〜/ .bashrc作为编译命令,是否有另一个使用的init文件,普通的bash shell也使用它?关于shell创建的shell有什么不同 Compile Command


一种选择是只添加您需要的路径,如下所示: (setenv "PATH" (concat (getenv "PATH") ":/usr/texbin"))
lawlist

@lawlist是的,但我想了解它为什么会这样,以及如何'修复'它不能解决它。
WilliamKF

此链接中包含的库将为您提供正确的方向,以便更好地了解如何处理默认行为: github.com/purcell/exec-path-from-shell 另见此链接: developer.apple.com/legacy/library/qa/qa1067/_index.html (基本上,从Finder启动的应用程序从.plist文件而不是shell环境继承其环境。)
lawlist

除非你使用登录开关,否则bash通常不会读取.bashrc和其他init文件(例如, bash -l
Peon

Answers:


1

compile 没有调用 .bashrc 因为 编译使用非交互式shell bash 所调用 .bashrc 当作为一个被调用时 互动 非登录shell

幸好, bash 确实有一种通过环境变量初始化非交互式shell的机制 BASH_ENV

当Bash以非交互方式启动时,为了运行shell脚本   例如,它查找变量 BASH_ENV 在环境中,   如果它出现在那里,则扩展其值,并使用扩展值作为   要读取和执行的文件的名称。 Bash表现得好像   执行以下命令:

if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi

但价值 PATH 变量不用于搜索文件名。

所以如果你设置了 BASH_ENV 环境变量到 $HOME/.bashrc 它应该调用你的 .bashrc 在里面 compile 子shell。

为OS X Mavericks应用程序设置环境变量本身似乎有点冒险。我最终还是把它放进了我的脑袋里 .emacs 文件,例如:

(setenv "BASH_ENV" "$HOME/.bashrc")

0

我目前的工作是做:

Meta-x compile source ~/.bashrc; cd ~/myCode/src; make

但是,我仍然想明白为什么 Meta-x compile 不反映的内容 .bashrc

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.