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
これで問題は解決するはずです。