システムで古いバージョンのbashが検出されました! SDKmanを更新するとき

システムで古いバージョンのbashが検出されました! SDKmanを更新するとき

macOSでソフトウェアを更新しようとしていますが、sdmanbashの古いバージョンエラーが発生します。

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/bash3.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

関連情報