chshは$ SHELLを変更しません


9

$SHELLOSXのiTermアプリでの値を変更するのにいくつか問題があります。iTermはで始まり/bin/zshますが、の値は$SHELL変更されていないようです。

私がやったこと:

  1. /bin/zshiTermの設定ウィンドウのように「コマンド」を変更しました。
  2. chshシェルをに変更するために実行され/bin/zshます。
  3. iTermが起動したことを確認 /bin/zsh

注1:OSXのストックターミナルアプリ「Terminal.app」:

echo $SHELL
/bin/zsh

注#2:OSXの人気のあるターミナルアプリ「iTerm.app」:

$ echo $SHELL
/bin/bash

$ echo $USER
$ melvkim

$ chsh -s /bin/zsh
Changing shell for melvkim.
Password for melvkim:
chsh: no changes made

1
調べました/etc/shellsか?マニュアルには、指定したシェルがそのファイルにない場合、標準のシェルとは見なされないと記載されています。
Bob Dalgleish、2014年

回答:


5

問題は、「iTerm」アプリのシェルとの設定の競合でした。解決するには、iTerm設定ウィンドウで「ログインシェル」コマンドをリセットしました。

iTerm.app->設定->プロファイル->一般->コマンド->「ログインシェル」をクリック

次に、を実行chshするように実行しました/bin/zsh

問題を再現するには(/bin/bash/ログインシェルがであっても$ SHELLがに設定されている/bin/zsh)、 "iTerm"設定を "Command:/ bin / zsh /"に戻す必要がありました。


1

シェルを変更しようとするだけの-sフラグchshで、おそらくOpen Directoryが原因で失敗します。通常のUNIXシステムの「chsh」は/etc/passwdエントリを変更します。しかし、私はchsh引数なしで実行することができ、それによってエディターと次の情報が得られました。

# Changing user information for nevin.
# Use "passwd" to change the password.
##
# Open Directory: /Local/Default
##
Shell: /bin/tcsh
Full Name: Nevin Williams
Office Location:
Office Phone:
Home Phone:

「Shell:」エントリをに編集することができ/bin/zsh、その後のターミナルウィンドウはZシェルプロンプトで開きました。


chsh引数なしで試してみました。まだ運がありません。変数は変化しません。実際、エディタがロードされたとき、それは示しました/bin/zsh
melvynkim 2014年

エディターでシェルを変更してみてください。/ bin / tcshから/ bin / zshに変更したり、戻ったりする画面キャプチャを作成しました。 bonmot.ca/~nevin/chsh.mov
Nevin Williams、

スクリーンキャストの投稿にご協力いただき、誠にありがとうございます。あなたのソリューションは他の端末エミュレータで動作するはずですが、私は$SHELLiTermで変更することはできませんでした。詳細については私の回答を参照してください。ありがとう!
melvynkim 2014年

1

アップグレードの問題に関して、@ mklement0が投稿した優れた説明と解決策については、こちらご覧くださいbash

私のシステム(OS X 10.10.1)で反対のことを行う際に同様の問題がありました:bashインストール後にデフォルトのログインシェルを再度oh-my-zsh作成しzsh、それをデフォルトにし、bashHomebrewを使用して3.2.53から4.3.30にアップグレードしました(なぜAppleは旧bashバージョンのヨセミテを出荷しているのですか?)

私が考えるSHELL環境変数が反映されますがないではないユーザーのために、実際のデフォルトのログインシェルを制御します。例えば、言うならば、bashあなたのデフォルトだった、あなたは新しい開いbash端末からシェルウィンドウを、次に$ export SHELL="/bin/zsh"; echo "$SHELL"示すだろう/bin/zshが、あなたが端末から新しいシェルウィンドウを開いてない場合ので、実際の変更は行われません$ echo $0、あなたが見ることになる-bash(は$0名前とパスが含まれていますシェルウィンドウを開始したコマンド(この場合bashは)の-横にあり、その横はログインシェルであることを示しています)。

@ mklement0が指摘したように、ユーザーの実際のデフォルトのログインシェルUserShellは、システムの内部データベースにあるユーザーのレコードのプロパティによって制御されます。これは、コマンドラインユーティリティを使用して照会および更新できますdscl。この情報は、シェルウィンドウを開いたときにターミナルアプリに渡されます。

chsh -s /bin/zsh行うことは、この変更であるUserShellに設定するプロパティをzsh使用すると、実行して、これを確認することができます- dscl . -read /Users/$USER/ UserShellその後すぐに、そしてあなたが表示されますUserShell: /bin/zsh。しかし、変更がされていない、あなたが何かやるまでは、現在のウィンドウで行なわexec su - $USER@ mklement0により示唆されるように、またはあなたまで近いとシェルウィンドウを開きます。


0

chsh -s /bin/zshデフォルトのMac端末からコマンドを実行してみてください。


1
これはOPと何が違うのですか?
JMY1000 2017

@ JMY1000 iTermからそのコマンドを実行しようとしても、変更は反映されません。Macのデフォルトのターミナルから実行することで機能するはずです。
mohitmayank 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.