.bashrc文件中的命令在Emacs中不可用。

10

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

我使用emacs -nw从终端窗口启动emacs。

当我执行M-x shell-command时,来自~/.bashrc的别名和函数不可用,会提示"command not found"。

我已经进行了相当多的谷歌搜索,但所有的帖子都说,在这种情况下应该工作的地方是~/.bashrc(而不是~/.profile或~/.bash_profile)。

我错过了什么?

3个回答

8

别名仅在交互式 shell 中可用 - 从 bash 手册中获取的快照:

除非使用 shopt 设置 expand_aliases shell 选项(请参见下面 SHELL BUILTIN COMMANDS 下的 shopt 描述),否则别名不会在 shell 非交互时扩展。


2
如果您从交互式shell(其中执行了.bashrc等文件)启动Emacs,则您的.bashrc中的命令应该对shell-commandshell都可用,至少对我来说是这样。但是,正如其他答案所说,没有真正的方法在Emacs中获取.bashrc环境。有一些关于.emacs_bash文件的文档,但对我来说从未起作用。
好的,这里误读了您的问题。如果您想要函数和别名而不是通过更改.bashrc中的路径来获取命令,则非交互性是问题。我猜您可以更改shell-command的默认参数(查看explicit-bash-args),使bash变为交互式,但这可能会产生意想不到的后果。

0

被接受的答案正确地说明了“别名仅在交互式 shell 中可用”。

这意味着为了从~/.bashrc中加载(确实位于正确位置的)别名,必须使用EmacsM-x shell-commandM-!)启动一个交互式 shell。

为此,在M-x shell-command中添加-i(交互式)开关:

(setq shell-command-switch "-ic")

附注,与Emacs无关:
某些操作系统上,用户需要将source ~/.bashrc添加到~/.bash_profile(或类似文件)中,因为系统并不总是自动读取~/.bashrc


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接