通常のzsh
( oh-my-zsh フレームワークを使用)からSudo su
を実行するたびに、古いBourne Shell(sh
)がデフォルトです(明らかに、これはほとんどの* nixのようなシステムの標準的な動作です)。 Sudo su
を実行した後、zsh
内からsh
を実行すると、Zシェルが表示されますが、oh-my-zshによる改善はありません。
シェルSudo su
の起動をzsh
に変更する方法はありますか?その場合、oh-my-zsh
を使用してzsh
のインスタンスを起動することもできますか?
OS X 10.8.4を使用しています。
スーパーユーザーとしてインタラクティブシェルを実行する別の方法は、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 Shellではなくなりました。 OS Xでは POSIX準拠バージョンのbash 、Ubuntuではダッシュです。
su
のマンページから、これを行う方法が2つあります。
最初の方法は、-s
または--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
を指すようにすることができます。
カスタムシェルが爆発した場合にシステムを保護するよりクリーンな方法は、ルートのホームディレクトリに.profileを作成することです。
if [ -x /opt/local/bin/bash ]; then
Shell=/opt/local/bin/bash
export Shell
exec /opt/local/bin/bash
else
echo /opt/local/bin/bash not found using default Shell of $Shell
fi
Bashではなく、必要なシェルへのパスを変更するだけです。
chpass
で簡単に実行できます:
$ Sudo chpass -s /bin/zsh