
當我運行echo $SHELL
輸出時,/bin/tcsh
這意味著我正在運行一個tcsh
shell。但是例如當我發出以下命令時
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 $$
我想你所有的問題都得到了解答。如果還有疑問,可以參考這篇文章來源。