Предоставление полного пути не работает, но вызов только имени программы делает, почему?

Что мне не хватает? Я могу вызывать «rvm» из командной строки, но не ссылаться на весь путь, which 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. 

Да, я посетил ссылку, на которую ссылаются, но я не вижу, как это относится ко мне.

which rvm ищет исполняемый файл, называемый rvm . Этот исполняемый файл выводит сообщение «RVM is not a … …» при запуске.

rvm , вероятно, является функцией или, возможно, псевдонимом в вашей оболочке. Он определен в вашем ~/.bashrc (или в общесистемном /etc/bash.bashrc или в файле, включенном в один из них). Чтобы узнать, что rvm команда rvm , запустите type rvm или command -v rvm .

См. Также Как использовать команду aliased?

rvm use работает путем изменения переменных среды, чтобы указать, какая версия рубина должна использоваться. Это можно сделать только в том случае, если он запущен как функция. Если вы запустите его как команду, либо используя полный путь, либо не имея определенную функцию, это не сработает. Это связано с тем, что при запуске в виде отдельного процесса, который обрабатывает свою собственную копию среды, эта копия изменяется, но сразу же теряется, когда процесс завершается.

Я только что добавил

 #!/bin/bash --login 

в начале скрипта в моей работе Хадсона. Все работает сейчас! 🙂