脚本的执行环境(eshell vs bash)



如何在脚本内部确定它是从eshell还是从普通shell(bash等)执行的?

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

更精确的检查将查看脚本的父进程

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

我最初将其标记为How do I tell a shell that it are running from in Emacs?的副本?,但我认为那里的答案是有缺陷或过时的,因为尽管它明确提到了eshell,但它似乎只适用于shelltermansi-termeshell必须是您可以在Emacs中运行的唯一一种不设置明显环境变量的shell?

只需将(setenv"EMACS"t")添加到~/.EMACS。因此,所有EMACS shell中的行为都是相同的。

相关内容

  • 没有找到相关文章