如何检查我使用的是哪个shell?
我读到终端只是shell,Unix提供了不同风格的shell:
- Bourne shell(sh)
- C shell(csh)
- TC shell(tcsh)
- Korn shell(ksh)
- Bourne Again shell(bash)
问题:
- 当我打开终端窗口时,默认打开哪个shell?
- 如何检查安装了多少个shell?
- 如何更改帐户中使用的shell?
您可以在终端中键入以下命令以查看您正在使用的shell:
echo $0
如果您使用bash ( Bourne Again Shell )终端,结果将类似于下面的内容:
-bash
要查找默认环境中的shell,可以检查SHELL
环境变量的值:
echo $SHELL
要查找当前shell实例,请查找具有当前shell实例的PID的进程(shell)。
要查找当前shell实例的PID:
echo "$$"
现在找到具有PID的进程:
ps -p
把它放在一起:
ps -p "$$"
$SHELL
为您提供默认shell。 $0
为您提供当前的shell。
例如:我将bash作为我的默认shell,我将其用于终端应用程序。 但对于我的iTerm2应用程序,我在窗口打开时使用该命令: /bin/ksh
。
所以我的$0
给了iTerm2上的/bin/ksh
。 $SHELL
在iTerm2上给我/bin/bash
。 $0
, $SHELL
在终端上给我/bin/bash
要知道哪个是您的用户的默认shell,您可以运行:
echo "$SHELL"
例如,如果您使用的是Bash,则应获得以下输出:
/bin/bash
如果你没有改变任何配置它应该是Bash,因为Bash它是Ubuntu上的默认shell。
其他答案倾向于使用shell特定function,但我们正在尝试发现我们正在使用哪个shell,因此他们假设问题的答案。 例如,没有一个答案适用于鱼类。
sh -c 'ps -p $$ -o ppid=' | xargs ps -o cmd= -p
而是在sh的调用中使用$$语法,但是我们正在寻找PPID而不是PID。 使用PPID查找cmd。
sh -c 'ps -p $$ -o ppid=' | xargs -i readlink -f /proc/\{\}/exe
感谢@muru的改进