Linux和Unix都提供了开箱即用的各种shell。你可以找到bash (Bourne shell), ksh (Korn shell), csh (C shell)/tcsh (TC shell), sh (Bourne shell)和更多默认安装。然而,你如何检查自己使用的shell 呢?找出我在Linux上使用的shell的最好方法是什么? echo $SHEL 不是那么可靠。本文解释了如何找出自己在Linux、MacOS、FreeBSD或类Unix系统中使用的shell。

下面的echo命令或printf命令应该可以使用:

linuxmi@linuxmi:~/www.linuxmi.com$ echo “$SHELL”
/bin/bash

或者

linuxmi@linuxmi:~/www.linuxmi.com$ printf “我现在的shell – %s\n” “$SHELL”
我现在的shell – /bin/bash

请注意,这$SHELL是当前用户的shell程序,但不一定是当前正在运行的shell程序。试试下面的例子

linuxmi@linuxmi:~/www.linuxmi.com$ echo “我现在的shell是 $SHELL ($0)”
我现在的shell是 /bin/bash (bash)
linuxmi@linuxmi:~/www.linuxmi.com$ ksh
$ echo “我现在的shell是 $SHELL ($0)”
我现在的shell是 /bin/bash (ksh)

因此,我建议使用以下语法来检查您正在使用哪个shell。

如何检查我正在使用哪个shell?

这是另一个古老的Unix技巧。使用带-p {pid}选项的ps命令。以下命令选择其进程ID号显示在pid中的进程。使用以下命令找出您所在的shell:

示例输出:

那么传递给-p选项的$参数是什么?记住$返回当前进程的PID(进程标识号),而当前进程就是您的shell。因此,在该编号上运行ps会显示您的Shell的进程状态列表。在该清单中,您将找到shell的名称(查找CMD列)。

在我的Linux机器上:

linuxmi@linuxmi:~/www.linuxmi.com$ ps -p $$

样例输出:

PID     TTY    TIME      CMD
10603 pts/2 00:00:00 bash

您可以按以下方式将shell名称存储在变量中:

MYSHELL=`ps -hp $$|awk ‘{echo $5}’`

请注意,这些是反引号,而不是撇号。或者,如果您有bash shell,则最好尝试以下方法:

MYSHELL=$(ps -hp $$|awk ‘{echo $5}’)

另一个选项如下:

echo $0

printf “%s\n” $0

以上命令的输出示例:

linuxmi@linuxmi:~/www.linuxmi.com$ ksh
$ echo $0
ksh
$ ps -p $$
PID TTY TIME CMD
12350 pts/6 00:00:00 ksh
$ csh
% ps -p $$
PID TTY TIME CMD
12357 pts/6 00:00:00 csh
%

如何检查我的Linux机器上安装了多少个shell ?

/etc/shells是一个文本文件,其中包含有效登录shell的完整路径。输入以下[nixmd name=”cat”]以查看列出您的Linux或Unix机器上安装了多少个Shell:

linuxmi@linuxmi:~/www.linuxmi.com$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/ksh2020
/usr/bin/rksh2020
/bin/csh
/usr/bin/csh

当我打开终端应用时,默认情况下打开哪个shell?

您的默认外壳程序在/etc/passwd文件中定义。因此,请尝试以下grep命令:

linuxmi@linuxmi:~/www.linuxmi.com$ grep “^$USER” /etc/passwd

看起来/bin/bash shell是我的默认shell。想要更改您的默认shell?请阅读“在Linux或Unix中更改shell”页面以了解更多信息。让我们再次总结所有命令。

如何检查我正在使用哪个shell:

使用以下Linux或Unix命令:

  1. ps -p $$ - 可靠地显示您当前的shell名称。
  2. echo "$SHELL" - 显示当前用户的shell,但不一定是正在运行的shell。
  3. echo $0 - 在Linux或类似Unix的系统上获取当前shell解释器名称的另一种可靠且简单的方法。
  4. cat /etc/shells - 列出当前安装的有效登录Shell的路径名
  5. grep "^$USER" /etc/passwd - 打印默认的shell名称。当您打开终端窗口时,默认shell程序将运行。
  6. chsh -s /bin/ksh - 将您的帐户使用的shell程序从/ bin / bash(默认)更改为/bin/ksh

发表评论

电子邮件地址不会被公开。 必填项已用*标注