brew upgrade
を実行すると、新しいバージョンが表示されます。どうすれば使用できますか?
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-Apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
$ brew upgrade bash
Error: bash-4.2.45 already installed
$ which bash
/bin/bash
私は持っているのを見ます
/usr/local/Cellar/bash/4.2.45/bin
しかし、私がするとき
$ /usr/local/Cellar/bash/4.2.45/bin/bash
私はまだ
$ bash -version
GNU bash, version 3.2.51(1)-release (x86_64-Apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
08:06:45 mdurrant w89123148q1 /usr/local/Cellar/bash/4.2.45/bin master
/etc/shells
の内容は次のとおりです。
/usr/local/Cellar/bash/4.2.45/bin/bash # (I added this)
/usr/local/bin/bash
/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
chshは私が望んでいたことをしていないようでした:
$ chsh -s /usr/local/Cellar/bash/4.2.45/bin/bash
Changing Shell for mdurrant.
Password for mdurrant:
chsh: /usr/local/Cellar/bash/4.2.45/bin/bash: non-standard Shell
$ bash --version
GNU bash, version 3.2.51(1)-release (x86_64-Apple-darwin13)
Copyright (C) 2007 Free Software Foundation, Inc.
私はここにファイルを持っています:
$ l /usr/local/Cellar/bash/4.2.45/bin/bash
-r-xr-xr-x 1 mdurrant admin 699688 Apr 14 19:54 /usr/local/Cellar/bash/4.2.45/bin/bash*
とにかくインタラクティブに呼び出しようとする新しいbashバージョンはまだ実際には見ていません。
$ echo $BASH_VERSION
ショー
3.2.51(1)-release
Dsclを使ってみました
> change Local/Default/Users/mdurrant UserShell /bin/bash /usr/local/Cellar/bash/4.2.45/bin/bash
しかし得た
<main> attribute status: eDSAttributeNotFound
<dscl_cmd> DS Error: -14134 (eDSAttributeNotFound)
そして今リストは示しています
> UserShell: /usr/local/Cellar/bash/4.2.45/bin/bash
bash --version
(またはbash -version
)は、現在のシェルのバージョンを報告しませんが、$PATH
の最初に来るbash
実行可能ファイルのバージョンを報告します。
[注:OSX 10.10(Yosemite)は、/usr/local/bin
が/bin
の$PATH
などのシステムパスの前に配置される最初のOSXバージョンです。 10.9までは、システムパスが最初に来ました。したがって、OPが質問をしたとき、bash --version
は、自作でインストールされたバージョン(/bin/bash
)]ではなく、SYSTEMのbashのバージョン(/usr/local/bin/bash
)を報告しました。
現在のBashShellのバージョンを知りたい場合は、以下を使用してください。
echo $BASH_VERSION
言い換えれば、シェルは正常に変更された可能性があります-testに欠陥がありました。
You canchsh
を使用して、次のように現在のユーザーのシェルを変更します。
[更新:/usr/local/bin/bash
の特定のバージョン管理されたパスではなく/usr/local/Cellar/bash/<version>/bin/bash
を使用するように切り替えました。これは、Homebrewがシンボリックリンクを/usr/local/bin/bash
に自動的に保持して最新のインストールバージョンを指すようにするためです。 @drevickoへの帽子のヒント。]
# First, add the new Shell to the list of allowed shells.
Sudo bash -c 'echo /usr/local/bin/bash >> /etc/shells'
# Change to the new Shell.
chsh -s /usr/local/bin/bash
パスワードの入力を求められることに注意してください。
その時点から作成するターミナルタブ/ウィンドウは、すでに新しいシェルを使用しています。
@bmikeからのボーナスのヒント:current Shellインスタンスをすぐに新しいShellのインスタンスに置き換えたい場合は、次を実行します。
exec su - $USER # instantly replaces current Shell with an instance of the new Shell
パスワードの入力を再度求められることに注意してください。
または、dscl
--OSX Directory ServicesCLI-を使用して現在のユーザーのシェルを変更します。これはもっと面倒ですですが。
examine現在のユーザーのシェルには、次を使用します。
dscl . -read /Users/$USER UserShell # e.g. (default): 'UserShell: /bin/bash'
または、より簡単に言えば、ファイルパスのみを出力するecho $Shell
(例:/bin/bash
)。
To change現在のユーザーのシェルをたとえば/usr/local/bin/bash
にするには、次を使用します。
Sudo dscl . -change /Users/$USER UserShell /bin/bash /usr/local/bin/bash
注意:
/etc/shells
に含める必要はありませんが、/etc/shells
のコメントはFtpd will not allow users to connect who are not using one of these shells.
の状態になります。Terminal.app
(またはiTerm.app
)を再起動します-echo $BASH_VERSION
で新しいシェルを確認します-再起動は必要ありません。OPで発生したエラーの説明:
chsh: /usr/local/Cellar/bash/4.2.45/bin/bash: non-standard Shell
は、/usr/local/Cellar/bash/4.2.45/bin/bash
が/etc/shells
にリストされていなかったことを意味します(まだ、またはこの正確な形式ではありません)。<main> attribute status: eDSAttributeNotFound
:このdscl
エラーは、-change
コマンドに指定された最後から2番目の(最後から2番目の)引数がcurrent属性値と一致しない場合に発生します-属性を変更するために属性の現在の値を指定することは、明らかに奇妙な要件です。質問は両方の条件が満たされていることを示唆していますが、実験のためにright回では満たされていないのではないかと思います。
答えは、はい、私はする必要があったということでした:
brew install bash
_/etc/shells
_へのパスを追加しますchsh -s
_を使用します:_chsh -s /usr/local/Cellar/bash/4.2.45/bin/bash
_おそらくdsclを使用してシェルを設定します。つまり、dscl
タイプ内です。
_> change Local/Default/Users/<username> UserShell /bin/bash /usr/local/bin/zsh
_
最も重要なこと:
再起動後に_$BASH_VERSION
_をエコーすると、4.2.45(2)-release
が表示されました
ITerm2の現在のバージョンでは、より簡単で邪魔にならない変更が可能です。 [設定]> [プロファイル]> [一般]で、[コマンド]の下の[ログインシェル]を次のように変更します。
/usr/local/bin/bash -l
実行する以外に何もする必要はありません。
echo /usr/local/bin/bash|Sudo tee -a /etc/shells;chsh -s /usr/local/bin/bash
その後、iTermとターミナルは新しいシェルに/usr/local/bin/bash
を使用する必要があります。
chsh
、dscl
、および[ユーザーとグループ]設定ペインはすべて/var/db/dslocal/nodes/Default/users/$USER.plist
を変更します。