无法从WSL 'bash script.sh'命令行运行ruby/bundle脚本,但可以从bash解释器'sh script.sh'运行

h5qlskok  于 11个月前  发布在  Ruby
关注(0)|答案(2)|浏览(98)

我已经使用以下命令在Windows 11上的WSL 2环境中成功安装了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


为什么?我有许多其他的.sh脚本,我可以使用bash script.sh语法运行得很好。
我发现以下问题
$ bundle install throws the error: bash: /usr/local/bin/bundle: /usr/bin/ruby2.7: bad interpreter: No such file or directory
但不幸的是,建议的修复不起作用(我已经安装了bundler)。
编辑:使用wsl -e bash test.sh而不是bash test.sh会产生同样的错误。另外,如果test.sh只包含ruby --version,我会得到ruby: command not found

uxh89sit

uxh89sit1#

test.sh脚本更改为:

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

字符串
保存更改并再次运行:

bash test.sh


这应该能解决问题。

2guxujil

2guxujil2#

问题来自ruby,PATH是在.bashrc中设置的,实际上.bash_profile也是。解决方案是将bash作为登录shell(bash -l)运行。

相关问题