确定当前用户的shell

Ern*_*sto 8 shell

我正在编写一个.sh脚本,在某些时候,会将用户的shell更改为/ bin/zsh.该命令当然如下:

chsh -s /bin/zsh
Run Code Online (Sandbox Code Playgroud)

但是这会询问用户的密码,我想只在当前用户的shell尚未执行时才执行它/bin/zsh.为此,我需要一个让我知道当前shell的命令,并将其与"/bin/zsh"类似的东西进行比较.我发现有ac getusershell函数,但是有没有办法从shell脚本中知道这个?

更新:对不起,我指的是用户指定为他首选shell的shell.所以,是的,指定的那个/etc/passwd.这背后的逻辑是,脚本即将将用户首选的shell更改为zsh,我只想让脚本首先检查它是否已经是zsh.

Dan*_*iel 15

$SHELL 返回当前用户的shell:

$ echo $SHELL
/bin/zsh
Run Code Online (Sandbox Code Playgroud)

  • 注意,如果用户没有启动或执行不同的shell,`$ SHELL`只与`/ etc/passwd`中的相同.查找登录shell的防弹方法是查看`/ etc/passwd`. (2认同)
  • @Jens,不是防弹。用户条目可能位于 /etc/passwd 之外的其他地方,如 NIS、NIS+ 或 LDAP。 (2认同)

jll*_*gre 5

您不应该假设/etc/passwd是存储用户外壳的位置。

我会用这个:

getent passwd $(id -un) | awk -F : '{print $NF}'
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,getent 仅在基于 Solaris、BSD 和 GNU/Linux 的操作系统上实现。

AIX、HP-UX 和 OS X 有自己的方法来做类似的事情(分别是lsusers -cpwget -ndscl ...),所以如果需要支持这些操作系统,应该增强这个命令。