我该如何知道我正在使用哪个Unix shell?

83

有没有一种简单的方法可以告诉我我在哪种Unix shell中?

有一个命令可以显示我是否在Bash,C shellKornShell (ksh),tcshZ shell (zsh)中吗?

E.g.,

这是什么壳

5个回答

137

尝试:

echo $0

这通常适用于各种不同的shell。


不支持 fish。 - rominf
@rominf:使用 fish,只需输入 $ 然后按 tab 键。你会看到许多已定义的 $__fish$fish 变量。 - Sandy Chapman
这也无法在源文件中运行。 - Steve

22

Mac

:苹果电脑。
ps

  PID TTY           TIME CMD
  223 ttys000    0:00.33 -bash

OpenBSD

ps

  PID TT  STAT       TIME COMMAND
20038 p0  Ss      0:00.01 -ksh (ksh)
22251 p0  R+      0:00.00 ps

或者只需执行 echo $SHELL 命令。


10
我认为$SHELL是系统(或用户)的默认shell,通常情况下(但不一定)在任何给定时刻实际使用的shell就是默认的shell。 - David Z

12

echo $SHELL命令将返回你所使用的相对于root的shell名称。


1
SHELL不能保证被设置。例如,我的登录shell是bash,但如果我在命令行中运行/bin/sh,SHELL仍然是/bin/bash,即使/bin/sh是dash。 - Mark Evans
2
$SHELL 是登录 shell。如果您的登录 shell 是 bash,而您启动了 tcsh,则 $SHELL 仍将是 bash,即使您正在运行的 shell 是 tcsh。 - Ole Tange
检查一下 # ps -p $$ | tail -1 | awk '{print $4}' - Ranjithkumar T

8

我所知道的每个shell都会将$变量($$)设置为其进程ID。因此...

ps | grep $$

鱼是例外。你需要使用%self。 - rominf
有时候我觉得鱼不应该被算作“Unix shell”之一。我们对于自己的代码混乱状态感到很舒适,请不要把所有的面条都拉直。 - pra

6
如果您使用的是OS X终端,则在启动时终端的标题栏中指定了shell - 如下所示:Terminal - ShellName - 80x24

我认为这是正确的答案。 - Camilo Sanchez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接