web-dev-qa-db-ja.com

フルパスを指定することはできませんが、プログラムの名前だけを呼び出すことはできます。なぜですか?

何が足りないのですか?コマンドラインから「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
harperville

which rvmは、rvmという実行可能ファイルを探します。その実行可能ファイルは、実行時に「RVMは機能ではありません…」というメッセージのみを出力します。

rvmは、おそらくシェル内の関数またはエイリアスです。 ~/.bashrc(またはシステム全体の/etc/bash.bashrc、またはこれらのいずれかから含まれるファイル)で定義されています。 rvmコマンドが何であるかを確認するには、type rvmまたはcommand -v rvmを実行します。

参照 エイリアスコマンドでwhichを使用する方法?

追加しました

#!/bin/bash --login 

私のハドソンの仕事のスクリプトの冒頭で。すべてが機能するようになりました。 :)

0
Aleksandr P.

rvm useは、環境変数を変更して、使用するRubyのバージョンを示すことで機能します。これは、関数として実行する場合にのみ実行できます。コマンドとして実行する場合は、フルパスまたは関数が定義されていないため、機能しません。これは、プロセスが環境の独自のコピーを取得する別のプロセスとして実行された場合、そのコピーは変更されますが、プロセスが終了するとすぐに失われるためです。

0
qqx