我在〜/ .bashrc中定义了一些别名和函数。
我使用emacs -nw
当我执行M-x shell-command
时,〜/ .bashrc中的别名和函数不可用,但是给出“找不到命令”。
我已经搜索了很多但是我遇到的所有帖子都说,如果我理解正确的话,〜/ .bashrc就是这个应该工作的地方(而不是〜/ .profile或〜/ .bash_profile)
我错过了什么?
答案 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
。