来自.bashrc的命令在Emacs中不可用

时间:2009-09-08 11:11:36

标签: emacs bash

我在〜/ .bashrc中定义了一些别名和函数。

我使用emacs -nw

从终端窗口启动emacs

当我执行M-x shell-command时,〜/ .bashrc中的别名和函数不可用,但是给出“找不到命令”。

我已经搜索了很多但是我遇到的所有帖子都说,如果我理解正确的话,〜/ .bashrc就是这个应该工作的地方(而不是〜/ .profile或〜/ .bash_profile)

我错过了什么?

3 个答案:

答案 0 :(得分:8)

别名仅在交互式shell中可用 - 来自bash手册页的快照:

  

当别名没有扩展时   shell不是交互式的,除非   expand_aliases shell选项已设置   使用shopt          (参见下面SHELL BUILTIN COMMANDS下的shopt说明。)

答案 1 :(得分:2)

如果从交互式shell(其中已执行.bashrc等)启动Emacs,则。{1}}和shell-command的.bashrc命令应该可用,至少是它对我有用。

但是,正如另一个答案所说,没有真正的方法可以在emacs中获得.bashrc环境。有一些关于.emacs_bash文件的文档,但这对我来说没用。


好在这里误读你的问题。如果您通过更改.bashrc中的路径来查找函数和别名而不是命令,则非交互性就是问题所在。我猜你可以将默认参数更改为shell-command(看看shell)以使bash具有交互性,但这可能会产生意想不到的后果。

答案 2 :(得分:0)

接受的 answer 正确说明“别名仅在交互式 shell 中可用”。

这意味着为了从 ~/.bashrc 加载(确实位于正确位置)别名,必须使用 Emacs 的 {{1} } (M-x shell-command)。

要实现此目的,请将 -i(交互式)开关添加到 M-! 中:

M-x shell-command

旁注,与(setq shell-command-switch "-ic")无关:
some operating systems 上,用户需要将 Emacs 行添加到 source ~/.bashrc(或类似的),因为系统并不总是自动读取 ~/.bash_profile