有谁能告诉我我的系统中安装了哪些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
答案 0 :(得分:1)
SHELL
环境变量为您提供登录shell。
根据您的用户名检查提到的shell路径(上一栏)或XXXXXXX
su
/etc/passwd
(grep ^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 bash
(bash
),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
。