web-dev-qa-db-ja.com

brewが示す新しいバージョンのbashをiTermで使用するにはどうすればよいですか? OSXでユーザーのシェルを変更する

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
28
Michael Durrant

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

注意:

  • 最後から2番目の引数は現在有効な値でなければなりません。
  • interactiveを使用する場合、新しい値を/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回では満たされていないのではないかと思います。

42
mklement0

答えは、はい、私はする必要があったということでした:

  • _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が表示されました

1
Michael Durrant

ITerm2の現在のバージョンでは、より簡単で邪魔にならない変更が可能です。 [設定]> [プロファイル]> [一般]で、[コマンド]の下の[ログインシェル]を次のように変更します。

/usr/local/bin/bash -l
1
n.caillou

実行する以外に何もする必要はありません。

echo /usr/local/bin/bash|Sudo tee -a /etc/shells;chsh -s /usr/local/bin/bash

その後、iTermとターミナルは新しいシェルに/usr/local/bin/bashを使用する必要があります。

chshdscl、および[ユーザーとグループ]設定ペインはすべて/var/db/dslocal/nodes/Default/users/$USER.plistを変更します。

1
Lri