Techioz Blog

WSL「bash script.sh」コマンドラインからはruby/bundleスクリプトを実行できませんが、bashインタプリタ「sh script.sh」からは実行できます。

概要

次のコマンドを使用して、Windows 11 上の WSL2 環境に Ruby を正常にインストールしました。

$ sudo apt install gnupg2 build-essential dh-autoreconf
$ gpg --keyserver keyserver.ubuntu.com --recv-keys ...
$ \curl -sSL https://get.rvm.io | bash
$ rvm install ruby
$ gem update
$ gem install jekyll
$ gem install bundler

その後、インストールされた Ruby のバージョンは 3.1.3p185 になります (これは、ruby –version を実行すると得られるものです)

ここで、WSL ホーム ディレクトリにある次の test.sh スクリプトについて考えてみましょう。

#!/bin/bash
bundle exec jekyll build

bash コマンド プロンプトを開くと (Win+R を使用して bash と入力)、次のコマンドを正常に実行できます。

$ sh test.sh

この場合、Jekyll ビルドは正常に実行されます。

ここで、Powershell (または Windows CMD プロンプト) から次のように入力するとします。

$ bash test.sh

次のエラーが表示されます。

/usr/local/bin/bundle: /usr/bin/ruby2.7: bad interpreter: No such file or directory

なぜ?他にも、bash script.sh 構文を使用して正常に実行できる .sh スクリプトが多数あります。

次の質問を見つけました

エラーがスローされます: bash: /usr/local/bin/bundle: /usr/bin/ruby2.7: bad interpreter: No such file or directory

しかし残念ながら、提案された修正は機能しません(すでにバンドラーがインストールされています)。

編集: bash test.sh の代わりに wsl -e bash test.sh を使用すると、同じエラーが発生します。また、test.sh に Ruby –version だけが含まれている場合は、「ruby: command not found」というメッセージが表示されます。

解決策

test.sh スクリプトを次のように変更します。

#!/bin/bash
source ~/.rvm/scripts/rvm
rvm use 3.1.3 --install
bundle exec jekyll build

変更を保存して再度実行します。

bash test.sh

これで問題は解決するはずです。