确定在我的系统中运行的shell

时间:2016-05-02 11:21:34

标签: bash shell unix scripting

有谁能告诉我我的系统中安装了哪些shell?

因为当我使用我的用户名登录系统时,它最初显示的是bash shell,但后来在执行sudo后显示了korn shell。

详情请见下文。

-bash-3.2$ pwd
/home/w4x2spxt
-bash-3.2$ echo $SHELL
/bin/bash
-bash-3.2$ su - XXXXXXX
Password:
You have new mail.
The Oracle base remains unchanged with value /apps/oracle
abc0300ab123:/a30/home/XXXXXXX >> echo $SHELL
/bin/ksh

4 个答案:

答案 0 :(得分:1)

SHELL环境变量为您提供登录shell。

根据您的用户名检查提到的shell路径(上一栏)或XXXXXXX su /etc/passwdgrep ^XXXXXXX /etc/passwd),如下所示:cat /etc/shells

当您登录或su给该用户时,该文件中提到的shell将是您的默认shell。

要检查系统上所有已安装的shell,请使用以下命令:val group = dataFrame.map( r => (dataFrame.rdd.filter(s => s.getAs(0) == r.getAs(0)).collect()))

答案 1 :(得分:0)

  • 您的用户使用/bin/bash作为默认shell。

  • root使用/bin/ksh作为默认shell。

默认shell是特定于用户的设置,因此在用户中使用不同的shell是没有挑剔的。只需查看/etc/passwd中的最后一列,就会惊讶于各种值。

请注意,当您执行su时,您将以root身份登录。如果您添加短划线并说su -您正在加载根配置文件,那么您就拥有了它的环境。

答案 2 :(得分:0)

环境变量SHELL始终包含登录用户的登录shell,在/etc/passwd中定义。

如果用户在登录后更改了他/她的shell,例如exec bashbash),SHELL仍将展开到登录shell。

在您的情况下,用户XXXXXXX拥有登录shell /bin/ksh,执行:

grep '<user_name>' /etc/passwd

匹配结果。

找到当前的shell:

echo $0

ps -p $$

答案 3 :(得分:0)

执行此操作时:

-bash-3.2$ su - XXXXXXX

您正在启动分配给用户XXXXXXX的任何shell。对于su -来说这通常是一件好事,因为它将shell作为登录进程运行,因此您可以获得正常的shell启动初始化(profile,* shrc等)。如果您运行与其帐户设置的shell不同的shell,则可能会错过所有自定义。

通过在密码数据库中查找,您可以查看与帐户关联的shell。这在不同类型的系统和身份验证方案中非常可靠:

perl -MUser::pwent -le 'print( (getpwnam "XXXXXXX")->shell || "/bin/sh" )'

如果您想要一个shell,您可以始终以另一个用户的身份显式运行shell:

su XXXXXXX -c "bash --login"

sudo -u XXXXXXX bash --login # if you have sudo privs

要查看您当前正在运行的shell,请查看$0

echo $0

要查看您默认获得的shell,请查看$SHELL