2012-03-24 95 views
2

如何确定脚本内部 - 它是从eshell还是从正常shell(bash等)执行?脚本的执行环境(eshell vs bash)

+0

可能值得为此记录一个错误报告('M-x report-emacs-bug'),因为'eshell'应该将类似的环境变量添加到可用于其他Emacs shell选项的环境变量似乎是完全合理的。 – phils 2012-03-26 00:47:35

回答

0

只需添加(SETENV “EMACS”, “T”)到〜/的.emacs的父进程。所以这个行为在所有的emacs shell中都是一样的。

+1

当然,如果意图是编写一个便携式脚本,而这个脚本恰好适用于在eshell下运行它的任何人,这将无济于事。 – phils 2012-03-28 11:17:38

1

我最初被标记将此作为How do I tell a shell that it is running from within Emacs?重复,但我认为答案有硬伤的或过时的,因为尽管它明确提到eshell,似乎只适用于shelltermansi-termeshell必须是唯一一种你可以在Emacs中运行的shell,不会设置一个明显的环境变量?

+0

正确 - 这些问题的答案在这里是不适合的:在这两种情况下,'echo $ EMACS'不会为ehell和ebash等等提供任何帮助。所以,请不要将此问题标记为“重复”。 – egor7 2012-03-25 11:14:55

+0

投票无法删除,但由于需要多次投票才能将问题作为重复结案,所以没有什么可担心的。 – phils 2012-03-25 12:20:42

5

Eshell没有设置任何特定的环境变量。您可以检查$TERM:它在Eshell下设置为dumb

一个更精确的检查会看剧本

if [ -t 1 ] && [ "$TERM" = "dumb" ] && [ "$(ps -o comm= -p $PPID)" = "emacs" ]; then 
    echo "This looks a lot like eshell" 
fi