如何告诉shell它在Emacs中运行?

时间:2011-08-20 06:11:38

标签: emacs environment-variables

我有一个程序,它使用ansi终端代码做一些奇特的东西,如在终端中运行时擦除行。当它从Emacs中运行时,它显然会搞砸缓冲区。

该程序有一个不使用它的选项,所以我希望能够在Emacs中的shell中运行时打开该选项。

我作为Makefile的一部分执行该程序,可以从终端执行,也可以在Emacs中使用编译模式。

那么有没有办法让编译模式设置一个环境变量(或类似的东西),在Makefile中很容易捕获,以便在适当的时候使用该选项?

在make命令中手动添加额外的参数(在任何一种情况下)都是我想要避免的。

2 个答案:

答案 0 :(得分:4)

EMACS在$EMACS个会话中设置M-x shell环境变量,因此您应该检查一下(假设您不会在shell脚本中的其他地方无意中定义EMACS):

# from login shell
echo $EMACS

# within Emacs shell
bash-4.2$ echo $EMACS
t

答案 1 :(得分:3)

Emacs也会设置$ INSIDE_EMACS环境变量。如果您不仅需要知道是否在emacs中运行shell会话,而且还知道您正在使用哪个版本的emacs以及如何运行shell会话(这对于了解您是否有用),这对您非常有用。在脚本中使用ansi控制字符)。这是我在Emacs中使用bash shell时所获得的(使用'shell'):

~ $ echo $INSIDE_EMACS
24.0.50.3,comint
~ $ 

当我在Emacs中使用Bourne shell时(使用'ansi-term'),这是相同的:

sh-3.2$ echo $INSIDE_EMACS
24.0.50.3,term:0.96
sh-3.2$ 

这是我从终端(不是在Emacs中)做同样的事情时得到的:

~ $ echo $INSIDE_EMACS

~ $