Debian11脚本执行gem install bundler报错‘gem: command not found’排查
问题解决方案
1. 解决gem: command not found错误
脚本执行时属于非交互式Shell,不会自动加载RVM的环境配置;而手动执行命令时是交互式Shell,会加载~/.bashrc或~/.profile里的RVM初始化内容,这是两者的核心差异。
在脚本开头添加RVM环境加载语句:
source "$HOME/.rvm/scripts/rvm"如果你的RVM是全局安装(配置文件在
/etc/profile.d/rvm.sh),则改为:source /etc/profile.d/rvm.sh修改后的完整脚本示例:
#!/bin/bash source "$HOME/.rvm/scripts/rvm" rvm install ruby-2.7.2 gem install bundler --no-doc确保脚本具备执行权限:
chmod +x /tmp/script.sh
2. 解决su -c运行脚本的权限问题
你之前的su命令参数顺序有误,且未模拟登录Shell导致环境变量未加载,同时可能存在RVM目录或脚本的权限配置问题。
使用正确的
su命令格式(模拟登录Shell以加载用户完整环境):su -l username -c "/tmp/script.sh"注:
-l选项会让Shell以登录模式运行,自动加载用户的~/.bash_profile、~/.bashrc等配置,确保RVM环境被正确加载。检查并修复RVM目录权限(确保普通用户拥有读写权限):
sudo chown -R username:username "$HOME/.rvm"确保脚本本身权限配置正确:
chmod 755 /tmp/script.sh
验证方法
可以在脚本中添加环境检查语句,确认RVM是否正常加载:
#!/bin/bash source "$HOME/.rvm/scripts/rvm" echo "当前RVM路径: $rvm_path" echo "当前Ruby版本: $(ruby --version)" rvm install ruby-2.7.2 gem install bundler --no-doc
内容的提问来源于stack exchange,提问作者Celso Annes
相关产品推荐
相关产品推荐

