我在哪个 shell 上运行?

cof*_*Mug 44 bash tcsh

当我运行时echo $SHELL,输出说/bin/tcsh这意味着我正在运行一个tcshshell。但是例如当我发出以下命令时

alias emacs 'emacs -nw' 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

bash: alias: emacs: not found
bash: alias: emacs -nw: not found
Run Code Online (Sandbox Code Playgroud)

当我发出alias emacs="emacs -nw"它运行正常!

这令人困惑,因为我正在运行,tcsh但命令由bash.

可能是什么原因?

ter*_*don 53

$SHELL不一定是您当前的 shell,它是默认的登录 shell。要检查您正在使用的外壳,请尝试

ps $$
Run Code Online (Sandbox Code Playgroud)

这应该适用于ps支持 BSD 语法的最新 Unix/Linux 。否则,这是便携式(POSIX)方式

ps -p $$
Run Code Online (Sandbox Code Playgroud)

如果您正在运行,那应该返回如下内容tcsh

8773 pts/10   00:00:00 tcsh
Run Code Online (Sandbox Code Playgroud)

如果你想tcsh成为你的默认 shell,请使用chsh来设置它。

  • 为什么不只是`ps $$` (4认同)

小智 10

在命令行中,您还可以使用该$0变量来确定您使用的是哪个 shell。例如:

~$ echo $0
/bin/bash


~$ ksh
$ echo $0
ksh
Run Code Online (Sandbox Code Playgroud)

注意:您不能在脚本中使用 $0 来确定 shell,因为 $0 将是脚本本身。