提供完整路径不起作用,但仅调用程序名称却可以,为什么?

提供完整路径不起作用,但仅调用程序名称却可以,为什么?

我缺少什么?我可以从命令行调用“rvm”,但不能引用which rvm我正在使用的整个路径。

这并不重要,但我一直以“jenkins”身份登录,并且这些命令是连续执行的。

$ whoami
jenkins

RVM位于此处

$ which rvm
/home/jenkins/.rvm/bin/rvm

这有效

$ rvm use 1.8.7
Using /home/jenkins/.rvm/gems/ruby-1.8.7-p370
Running /home/jenkins/.rvm/hooks/after_use

但这不起作用

$ /home/jenkins/.rvm/bin/rvm use 1.8.7
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal settings to allow shell login.
Please visit https://rvm.io/workflow/screen/ for example.

是的,我已经访问了引用的链接,但我不知道它如何适用于我。

答案1

which rvm查找名为 的可执行文件rvm。该可执行文件在运行时仅输出“RVM 不是函数……”消息。

rvm可能是 shell 中的一个函数,或者可能是一个别名。它已在您的~/.bashrc(或在系统范围内/etc/bash.bashrc或在其中之一包含的文件中)定义。要查看rvm命令是什么,请运行type rvmcommand -v rvm

也可以看看如何which在别名命令上使用?

答案2

rvm use通过修改环境变量来指示应使用哪个版本的 ruby​​ 来工作。仅当它作为函数运行时才能完成此操作。如果您将其作为命令运行,无论是使用完整路径还是未定义函数,都无法工作。这是因为,如果作为单独的进程运行,该进程将获得自己的环境副本,该副本会被修改,但在进程退出时会立即丢失。

答案3

我刚刚添加了

#!/bin/bash --login 

在我哈德森工作的剧本开头。现在一切正常了! :)

相关内容