web-dev-qa-db-ja.com

Sudo suシェルを変更する

通常のzshoh-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を使用しています。

13
Jules

スーパーユーザーとしてインタラクティブシェルを実行する別の方法は、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ではダッシュです。

21
Lri

suのマンページから、これを行う方法が2つあります。


最初の方法は、-sまたは--Shellフラグを使用することです(この引数をサポートするsuのバージョンで* NIXベースのOSを使用している場合)、その後にシェルのパスを指定します。あなたの選択。渡されたシェルが見つからない場合、suは次のメソッドに戻り、失敗すると/bin/shの呼び出しを試みます。

たとえば、suzshを強制的に起動させることができます(/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を指すようにすることができます。

4
Breakthrough

カスタムシェルが爆発した場合にシステムを保護するよりクリーンな方法は、ルートのホームディレクトリに.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ではなく、必要なシェルへのパスを変更するだけです。

1
cybrhippy

chpassで簡単に実行できます:

$ Sudo chpass -s /bin/zsh
0
user686249