回答:
スーパーユーザーとして対話型シェルを実行する別の方法はsudo -s
、シェルとして使用する$SHELL
です。
他の回答のコメントで述べたように、su -s /path/to/zsh
OS X では機能しません。
OS Xはログインシェルの変更もサポートしていません/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ではbash、UbuntuではdashのPOSIX準拠バージョンです。
su
manページ、あなたはこれを実現することができる2つの方法があります。
最初の方法は、-s
or --shell
フラグ(su
この引数をサポートするバージョンの* NIXベースのOSを使用していると想定)を使用し、その後に任意のシェルへのパスを指定することです。渡されたシェルが見つからない場合、su
次のメソッドに戻り、失敗すると、の呼び出しが試行され/bin/sh
ます。
たとえば、次のように強制的su
に起動することができますzsh
(それがに存在する場合/bin/zsh
)。
sudo su --shell /bin/zsh
2番目の方法は、root
ユーザーに指定されたデフォルトのシェルを変更することです(注意してください)。これを行うには、ファイル/etc/passwd
を編集して、root
ユーザーに指定されたシェルを変更します。デフォルトで指定されているシェルを確認するには、次のコマンドを実行します(スーパーユーザーが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
何ですか?技術的には、そのファイルで許可されているシェルのみが起動されますが、su
マンページではsu
、rootで呼び出されても問題はないと述べています:S
cat /etc/shells
/bin/zsh
受け入れ可能なシェルとして戻ります。
で簡単に行うことができますchpass
:
$ sudo chpass -s /bin/zsh