2012-03-24 129 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