-1

関数としてRVM をシェル セッションにロードする必要がある ため、このスクリプトを zshrc で実行します。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

ただし、このスクリプトを使用すると、新しいターミナルを起動するたびに約 1 秒遅くなります。そこで、このスクリプトを次のようにバックグラウンド ジョブにするソリューションを見つけました。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" &

それから、新しい端末を起動すると、起動時間が速くなりました。しかし、次のメッセージが表示されます。

[1]  + done       source "$HOME/.rvm/scripts/rvm"
  1. このスクリプトが端末の起動時間を遅くしないようにするより良い方法はありますか?
  2. このバックグラウンドジョブが完了したときに、この「完了」メッセージを抑制する方法は?
4

2 に答える 2

3

分析

RVM は現在のシェルで供給されている必要があるため、あなたが求めていることはできません。また、問題が実際に RVM にあるとは考えにくいです。あなたは実際にそれを計ったことがありますか?

私はそれを繰り返しプロファイリングしましたが、私の最も遅い時間は 10 分の 2 秒未満です。

$ time "$HOME/.rvm/scripts/rvm"

real        0m0.165s
user        0m0.068s
sys         0m0.036s

確かに RVM にはcdコマンドによる処理オーバーヘッドがあります (このブログ エントリによると約 60 ミリ秒) が、ごくわずかです。rbenv などの他のアプローチは、オーバーヘッドを別の場所に移動するだけです。

解決

独自のシステムで RVM を実行します。次に、時間source ~/.bashrcまたは呼び出している起動ファイル。おそらく、あなたのシェルの初期化で、あなたを行き詰まらせているのは別の何かです。

たとえば、私のシステムでは、インタラクティブ シェルの読み込みに約 8/10 秒かかります。

$ time bash -ic 'exit' > /dev/null 2>&1

real        0m0.853s
user        0m0.320s
sys         0m0.148s

その時間の 19% だけが RVM のロードに費やされています。それは私にはかなり理にかなっているように思えます。

于 2012-06-21T14:09:27.207 に答える
3

これは、rvm などでは機能しません。rvm は、現在のシェルの環境を操作できることに依存しています (独自のシェル関数を定義するなど)。ジョブをバックグラウンドに置くと、現在のシェルに影響を与えないサブプロセスで実行されます。例:

[0 mbunkus@chai-latte ~] print $some_var

[0 mbunkus@chai-latte ~] cat the-file
some_var=some_value
[0 mbunkus@chai-latte ~] source the-file &
[1] 17090
[0 mbunkus@chai-latte ~]
[1]  + done       source the-file
[0 mbunkus@chai-latte ~] print $some_var

[0 mbunkus@chai-latte ~] source the-file
[0 mbunkus@chai-latte ~] print $some_var
some_value

rvm が遅すぎる場合は、rvm に似た機能を実行するが、シェル マジックがはるかに少ないrbenvを確認することもできます。

于 2012-06-21T13:06:59.473 に答える