Answers:
以超级用户身份执行交互式shell的另一种方法是sudo -s
,它$SHELL
用作shell。
正如在其他答案中提到的评论,su -s /path/to/zsh
在OS X中不起作用。
OS X都不支持更改登录Shell /etc/passwd
,但是您可以使用dscl
:
$ dscl . -read /Users/root UserShell
/bin/sh
$ sudo dscl . -change /Users/root UserShell /bin/sh /bin/zsh
$ dscl . -read /Users/root UserShell
/bin/zsh
$ sudo su
My-iMac# echo $0
zsh
My-iMac# exit
$ sudo dscl . -change /Users/root UserShell /bin/zsh /bin/sh
$
/bin/sh
在大多数平台上不再是Bourne外壳了。在OS X中它是POSIX兼容的bash版本,在Ubuntu中是破折号。
在su
联机帮助页中,有两种方法可以完成此操作。
第一种方法是简单地使用-s
or --shell
标志(假设您使用的是基于* NIX的OS,该OS的版本su
支持此参数),然后是您选择的shell的路径。如果找不到通过的外壳,su
将还原为以下方法,否则将尝试调用/bin/sh
。
例如,您可以强制su
启动zsh
(假设它存在于中/bin/zsh
)为:
sudo su --shell /bin/zsh
第二种方法是修改为root
用户指定的默认外壳程序(请注意!)。这可以通过编辑文件/etc/passwd
并更改为root
用户指定的外壳来完成。要查看默认情况下指定的shell,可以运行以下命令(假设超级用户是root):
sudo grep root /etc/passwd
该命令应输出类似的内容root:x:0:0:root:/root:/bin/bash
。您可以简单地将/bin/bash
(或系统中设置的任何内容)更改为指向zsh
。
sudo su -s /bin/zsh
(或使用--shell
)返回su: illegal option -- s
。我在OS X 10.8.4上;OS X是否使用其他命令?
cat /etc/shells
什么?从技术上讲,只有该文件中允许的shell才会启动,尽管su
联机帮助页上说,这是否su
由root调用无关紧要:S
cat /etc/shells
返回/bin/zsh
可接受的外壳程序。