我在哪個 shell 上運行?

我在哪個 shell 上運行?

當我運行echo $SHELL輸出時,/bin/tcsh這意味著我正在運行一個tcshshell。但是例如當我發出以下命令時

alias emacs 'emacs -nw' 

我收到以下錯誤:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found

當我發佈時alias emacs="emacs -nw"它運行良好!

這很令人困惑,因為我正在運行,tcsh但命令是由bash.

可能是什麼原因?

答案1

$SHELL不一定是您目前的 shell,它是預設登入 shell。要檢查您正在使用的外殼,請嘗試

ps $$

這應該適用於最新的ps支援 BSD 語法的 Unix/Linux。否則,這是可移植的(POSIX)方式

ps -p $$

如果您正在運行,應該返回類似這樣的內容tcsh

8773 pts/10   00:00:00 tcsh

如果您想成為tcsh預設 shell,請使用chsh設定它。

答案2

在命令列中,您也可以使用該$0變數來確定您正在使用哪個 shell。例如:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh

注意:您無法在腳本中使用 $0 來確定 shell,因為 $0 將是腳本本身。

答案3

這是對上述所有更好答案的修正。我在識別破折號時遇到了一個小問題;似乎分享是正確的:

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | sh
ash (dash 0.5.5.1 ff)

curl -fsSL http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh | bash
bash 4.3.30(1)-release

非常適合在緊張的地方進行故障排除。乾杯。

答案4

Unix/Linux 作業系統可能安裝了多個 shell。您可以在終端機中鍵入以下命令以查看您正在使用哪個 shell:

下面是清單,

  • Bourne Shell – sh
  • C Shell – csh
  • T 殼 – tcsh
  • 科恩殼牌 – ksh
  • Bourn-again Shell – bash
  • 破折號外殼
  • Z殼

該列表並不完整,還有許多其他 shell。

/etc/shells 檔案儲存系統中安裝的所有 shell 的清單。只需執行以下命令即可找出已安裝的 shell,

$ cat /etc/shells

在 /etc/passwd 檔案上執行 grep 命令可以了解登入 Unix 或 Linux 作業系統時的預設 shell。

$ grep john /etc/passwd    

您也可以使用 $SHELL 變數來達到相同的目的。

echo $0
$ echo $SHELL

如果您使用的是,結果將類似於以下內容巴什諜影重重 外殼) 終端:當系統上安裝了多個 shell 時,您可以隨時切換 shell。

那你怎麼知道你現在正在執行哪個 shell 呢?

只需使用以下命令

-bash
$ ps -p $$

我想你所有的問題都得到了解答。如果還有疑問,可以參考這篇文章來源

相關內容