sudo suシェルを変更する


13

sudo su通常zshoh-my-zshフレームワークを使用)から実行する場合は常にsh、デフォルトで古いBourneシェル()を使用する必要があります(明らかに、これはほとんどの* nixのようなシステムでの標準の動作です)。実行後zsh、内shから実行sudo suすると、Zシェルが表示されますが、oh-my-zshによる改善はありません。

シェルのsudo su起動をに変更する方法はありますzshか?もしそうなら、それzshを使用して起動のそのインスタンスを持つことも可能oh-my-zshですか?

OS X 10.8.4を使用しています。

回答:


21

スーパーユーザーとして対話型シェルを実行する別の方法はsudo -s、シェルとして使用する$SHELLです。

他の回答のコメントで述べたように、su -s /path/to/zshOS 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準拠バージョンです


これは私が質問が欲しかったと思うものです。それは間違いなく私にとってうまくいったものです。どうもありがとうございます!編集私は彼が今望んでいたものを見ます-これは彼が望んでいたものだとは思わないので、この質問にはかなり賛成できませんが、とにかくメダルに値すると思います。あなたは私の質問に答えてくれました!
Wyatt8740 2014年

4

sumanページ、あなたはこれを実現することができる2つの方法があります。


最初の方法は、-sor --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です。


3
いつものように、ルートのシェルの変更には注意してください。シングルユーザーモードにしたくなく、壊れたときに/ usrを必要とするルートシェルがあるとします。リースメイクで確認してくださいあなたの新しいシェルを使用して、交換しているものよりも多くのファイルシステムの依存関係がありません
リッチHomolka

実行中sudo su -s /bin/zsh(またはを使用中--shell)はを返しますsu: illegal option -- s。OS X 10.8.4を使用しています。OS Xは別のコマンドを使用しますか?
Jules

@JulesMazurの出力はcat /etc/shells何ですか?技術的には、そのファイルで許可されているシェルのみが起動されますが、suマンページではsu、rootで呼び出されても問題はないと述べています:S
Breakthrough

cat /etc/shells/bin/zsh受け入れ可能なシェルとして戻ります。
Jules

2
@JulesMazurでは、このような混乱を避けるために、常にOSを含めるようにしてください。
terdon 2013

1

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.