11.04では、システムの新規インストールを行いました。そのインストールの一部は、 rvm をインストールすることで、rvm.sh
を/etc/profile.d/
に固定します。これは、/etc/profile
(/etc/profile.d/*.sh
の各+ rをロードする)がロードされていないため機能しません。ドキュメントによると、プロファイルはbashがログインで実行されている場合にのみ提供されます。これを確認するために、bash --login
を呼び出しました。その後、rvm
が使用可能になりました。
これは以前のバージョンのUbuntuで設定なしで機能していました。つまり、10.10の新規インストールでは、profile/.dが正しくソースされます。
私の質問は次のとおりです。私が間違っていることはありますか、それともこれを破ったNattyの新しい仮定がありますか?私の現在の回避策は、source /etc/profile
の~/.bashrc
(プロファイルがbeforebashrcをロードすることを意図しているのでひどいですが、騙す)。
デフォルトでは、gnome-terminalはログインシェルとしてbashを開始しません(bashはgnome-terminal内で開始したと仮定します)。つまり、bashは/etc/profile
または~/.profile
を読み取りません。正しく確認したように、ログインシェルとして起動した場合、bashはこれらのファイルを読み取ります。
問題の簡単な解決策は、/etc/profile
を読み取るように、ログインシェルとしてbashを開始するようにgnome-terminalを構成することです。そのためには、編集メニューから到達可能なgnome-terminalの「プロファイル設定」で「ログインシェルとしてコマンドを実行」を有効にする必要があります。
~/.profile
と~/.bashrc
の違いを台無しにするので、これはお勧めしません。理想的には、~/.profile
はログイン中に1回だけ必要な処理を行い、~/.bashrc
はbashが開始されるたびに必要な処理を行う必要があります。
bashrcとプロファイルの違いについて話しているスーパーユーザーの質問と回答 があります。詳細についてはこちらをご覧ください。
問題の説明から、ログイン中にrvmスクリプトを一度だけロードする必要があるようです。私の知る限り、Ubuntuは/etc/profile/
および~/.profile
を読み取るようにグラフィカルログインを設定しています。つまり、ログアウトして1回ログインすると、rvmスクリプトがアクティブになります。それでも動作しない場合は、bashセッションごとにrvmスクリプトをロードする必要があるかもしれません。その場合は、bashrc
がスクリプトにより適した場所です。
ただし、gnome-terminalによって読み取られる「インタラクティブなbash(1)シェル用のシステム全体の.bashrcファイル」というファイル/etc/bash.bashrc
があります。
Rvm関数[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
への私の呼び出しはそこに行き、そのシステムの数人のユーザーに対してうまく機能します。
RVMをマルチユーザーとしてインストールするには、ユーザーが次のコマンドを実行する必要があります。
(Ubuntuはログイン時に/etc/profile.dをソースしないため)
echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc
私は実際に、以下を絶対に必要としない限り、ボックスを完全に再起動したくない人のために見つけました...
/etc/profile
への変更を有効にするためにマシン全体を再起動する必要はありません。必要なのは、XWindowsデスクトップGUIを再起動して、システム全体の再起動の一部として起動する場合のように、構成を再読み込みすることだけです。
私の場合、LightDMを使用するxUbuntuを使用しますが、現在のデスクトップを呼び出す実行可能ファイルに潜むことができます。
まず、デスクトップGUI自体の内部からターミナルエミュレータを使用してこれを行うことはできません(少なくともLightDMでは使用できません)、SSHまたはセカンダリコンソールを使用する必要があります(Ctrl + Altを押しながらFキーまたは数字キーを押す場合)グラフィカルデスクトップのログインまたは画面から離れて、プレーンなターミナルウィンドウに移動する必要があります)。また、SSHを使用している場合は、VNCなどのリモートデスクトップを閉じることをお勧めします(明らかに、SSHを接続できるのは、開いているVNCウィンドウが再起動の試行中にディスプレイ0をポーリングすることを望まないためです) VNCセッションが終了するまで待機します)。
私はこれをSSHで常に行っていますが、特に物理的にあなたのマシンのそばにいなくて、完全な再起動を待って再接続する気にならないときは大きな命の恩人です:-D
これで、「セカンダリ」端末またはSSHの問題に一度簡単な部分が加わりました。(はい、これは現在のセッションを終了します。気にしないでください、開いているドキュメントや作業を保存してください)
Sudo service lightdm restart
デスクトップを強制終了してから再び起動するまで1分間待ちます(停止してから起動時に再び実行されるまでに数秒かかる場合があります)
これで、コンソール0に戻るか、VNCを使用して再接続すると、通常どおりログインプロンプトとログインが表示され、ターミナルエミュレータを開いてコマンドを発行するようになります。マシンを完全に再起動したかのようにすべてが再ソースされたため、問題はありません。
ターミナルエミュレータを使用してデスクトップ環境自体からSudo service lightdm restart
[またはstop
、start
を発行すると、コマンドがハングするだけで、何も起きていないように見えることを覚えておいてください。 。これは、現在そのコンソール(別名ディスプレイ)0を使用しているため、コマンドを実行する前にデスクトップが使用されなくなるのを待っているため、完全にダウンして立ち上がることができないためです。
最後の注:ターミナルエミュレーターのデスクトップ内から環境で再起動を実行してから、別のコンソールに切り替えてから再起動することはしませんでしたが、既にコンソールを切り替える場合は、コマンドを実行しないでくださいとにかくあるはずなので、そこから?
zSHまたはOH-MY-ZSHがある場合、プロファイルは/ etc/zprofile