macOSでソフトウェアを更新しようとしていますが、sdman
bashの古いバージョンエラーが発生します。
rajkumar.natarajan$ sdk update
An outdated version of bash was detected on your system!
We recommend upgrading to bash 4.x, you have:
3.2.57(1)-release
Need to use brute force to replace candidates...
しかし、bashバージョンはすでに最新バージョンです。
rajkumar.natarajan$ which bash
/usr/local/bin/bash
rajkumar.natarajan$ bash --version
GNU bash, version 5.0.11(1)-release (x86_64-apple-darwin16.7.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
答え1
sdman
あなたが見ているバージョンは/bin/bash
3.2.57です。 macosはそれより新しいバージョンを提供できないからです。
Appleがオペレーティングシステムに古いバージョンのBashを含める理由は、ライセンスに関連しています。バージョン4.0(3.2以降のバージョン)以降、BashはAppleがサポートしていない(必要な)GNU General Public License v3(GPLv3)を使用しています。こことここでこの問題に関する議論を見つけることができます。 GNU Bashバージョン3.2はGPLv2を採用した最後のバージョンであり、Appleはそれを承認してそれに固執しました。
最新バージョンのbashをインストールしましたが、/bin/bash
まだ交換していません。一部のレガシースクリプト/プログラムが破損する可能性があるため、これを行わないことをお勧めします(可能性は低いが可能です)。
私のアドバイスは警告を無視することです。 bash v3.2は通常、次の問題の影響を受けるため警告します。シェルショックただし、Apple は Bash v3.2 バージョンでこの脆弱性を修正しました。
その警告を無視することができず、ファイルの更新のリスクを受けたい場合は、/bin/bash
ファイルをバックアップの場所に移動し、新しいbashをここにシンボリックリンクします。
sudo mv /bin/bash /bin/bash.bak
sudo ln -s /usr/local/bin/bash /bin/bash
ただし、これを行うには次のものが必要です。SIPバイパス
システムの整合性保護を有効または無効にするには、回復オペレーティングシステムから起動し、端末でcsrutil(1)コマンドを実行する必要があります。
- コンピュータの再起動と起動中にCommandキーとRキーを押して、リカバリオペレーティングシステムから起動します。
- ユーティリティメニューから端末を起動します。
- 次のコマンドを入力します。
$ csrutil disable
- コンピュータでシステムの整合性保護を有効または無効にした後は、再起動する必要があります。
答え2
次の方法で最新バージョンに強制更新できます。
$ sdk selfupdate force