在elementaryOS执行rvm list时出现命令未找到错误求助
为啥执行
rvm list会弹出sudo相关错误,但最终还能正常输出? 嘿,我来给你拆解下这个问题——你遇到的这俩错误其实是shell兼容性搞的鬼,而且属于“报错但不影响核心功能”的情况,咱一步步说:
错误原因拆解
sudo: [[: command not found[[是bash、zsh这类现代shell才支持的扩展条件判断语法,但elementOS属于Debian系,默认的sh指向的是dash(一个轻量但功能有限的shell)。当rvm内部调用sudo时,sudo默认会用系统的默认shell(也就是dash)来执行命令,而dash不认[[,所以直接抛出“命令找不到”的错误。sudo: __function_on_stack: command not found__function_on_stack是bash专属的内部函数,同样的道理,dash里根本没这个东西,sudo用dash执行时自然找不到,也就报错了。
为啥命令最后还能正常输出?
这些错误是rvm执行过程中非核心步骤里的报错——比如可能是rvm在检查某些权限、环境变量时触发的,但这些步骤不影响它最终读取Ruby版本列表的逻辑,所以报错之后,后续的正常流程还是能走完,你就能看到正确的版本输出了。
几个解决思路
- 让sudo默认用bash执行:
用visudo命令编辑/etc/sudoers(一定要用visudo,避免语法错误导致sudo失效),添加一行:
或者在rvm的配置里指定sudo用bash,比如在Defaults env_keep += "SHELL"~/.rvmrc文件里加:rvm_sudo_flags="-s" - 检查rvm配置文件:
看看~/.rvmrc或者/etc/rvmrc里有没有自定义的sudo调用逻辑,是不是写了bash专属的语法但没指定shell。 - 更新rvm到稳定版:
有时候这类shell兼容问题会在rvm的更新里被修复,执行rvm get stable更新试试。
内容的提问来源于stack exchange,提问作者oddlyzen
相关产品推荐
相关产品推荐

