/ etc / profileがソースされていません


45

11.04では、システムの新規インストールを行いました。そのインストールの一部は、インストールすることでしたRVMスティック、rvm.sh中を/etc/profile.d//etc/profile(各+ rをロードする/etc/profile.d/*.sh)がロードされていないため、これは機能しません。ドキュメントによると、プロファイルはbashがログインで実行されている場合にのみ提供されます。これを確認するために、を呼び出したbash --login後、rvm利用可能になりました。

これは以前のバージョンのUbuntuで設定なしで機能していました。つまり、10.10の新規インストールでは、profile / .dが正しくソースされます。

私の質問は、私が間違ったことをしていることはありますか?それとも、これを破ったNattyで行われている新しい仮定はありますか?私の現在の回避策はsource /etc/profileinです~/.bashrc(プロファイルはbashrcのにロードすることを意図しているため、ひどいです)

回答:


52

デフォルトでは、gnome-terminalはログインシェルとしてbashを開始しません(bashはgnome-terminal内で開始されたと仮定します)。これは、bashが読み取りも読み取り/etc/profileもしないことを意味し~/.profileます。正しく確認したように、ログインシェルとして起動した場合、bashはこれらのファイルを読み取ります。

問題の簡単な解決策は、gnome-terminalがbashをログインシェルとして起動するように設定すること/etc/profileです。そのためには、編集メニューから到達可能なgnome-terminalの「プロファイル設定」で「ログインシェルとしてコマンドを実行」を有効にする必要があります。

それは区別を台無しので、私はこれを行うことはお勧めしません~/.profile~/.bashrc。理想的に~/.profileは、ログイン中に1回だけ必要なことを行う必要がありますが、~/.bashrcbashが開始されるたびに必要なことを行う必要があります。

ありbashrcにとプロフィールの違いについて話してスーパーユーザに質問と答えが。詳細については、こちらをご覧ください。

問題の説明から、ログイン中にrvmスクリプトをロードする必要があるのは1回だけであるようです。私の知る限りではUbuntuは読んでグラフィカルログインを設定している/etc/profile/~/.profile。つまり、ログアウトして1回ログインすると、rvmスクリプトがアクティブになります。それでも動作しない場合は、bashセッションごとにrvmスクリプトをロードする必要があるかもしれません。その場合はbashrc、スクリプトにとってより適切な場所です。


「コマンドをログインシェルとして実行」を設定すると、実際にロードされました/etc/profile(したがって.dがロードされました)。説明をありがとう-これにはrvmの人々のフォローアップが必要なようです。
マーク

7
Ubuntu 11.04は/etc/profile~/.profileログイン中に読み取れないようです。それは常に古いバージョンで動作するため、奇妙です。これは解決策ではなく、回避策だと思います。
ルカ

2
@lesmana GUIではなくCLIから「コマンドをログインシェルとして実行」を有効にする方法はありますか?リモートサーバーに接続して、Xをローカルに転送できません。
-Waseem

5

ただし、/etc/bash.bashrc gnome-terminalによって読み取られるファイルであり、「対話型bash(1)シェル用のシステム全体の.bashrcファイル」です。

rvm関数への私の呼び出し[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"は、そこに行き、そのシステムの数人のユーザーに対してうまく動作します。


gnome-terminalはそのようなことは何もしません。gnome-terminalは対話モードでbash(またはpasswdデータベースで設定されているログインシェル)を実行し、bashは対話的に読み取りを開始します/etc/bash.bashrc。まあ、少なくともDebian / Ubuntuでは。Bashは通常、システム全体のbashrcを読み取りません。debianがパッチを適用しました。
ガイラ

@geirha:dmitri @ Eos:〜$ uname -a Linux Eos 3.0.0-16-generic#29-Ubuntu SMP Tue Feb 14 12:48:51 UTC 2012 x86_64 x86_64 x86_64 GNU / Linux dmitri @ Eos:〜$ cat / etc / bash.bashrc#インタラクティブなbash(1)シェル用のシステム全体の.bashrcファイル。#このファイルの設定/コマンドをログインシェルに対しても有効にするには、このファイルを#/ etc / profileから入手する必要があります。#インタラクティブに実行しない場合は、何もしない[-z "$ PS1"] && return .....
ドミトリ

2
はい、明らかに、gnome-terminalはbashを呼び出してそのファイルを読み取ります。シェルがkshである場合、gnome-terminalはそのファイルを読み取りませんか?「何もしない」などの挑発的なフレーズを使い続ける前に、辞書で「pedant」という単語を調べることをお勧めします。
ドミトリ

4

RVMをマルチユーザーとしてインストールするには、ユーザーが次のコマンドを実行する必要があります。

(Ubuntuはログイン時に/etc/profile.dをソースしないため)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

3
Ubuntuは/etc/profile.d/、デフォルト/etc/profileでのファイルをループし、ソースするため、ログイン時にファイルをソースします/etc/profile.d/。ただし、これrvm.shに関数やエイリアスなどの対話型シェルのコードが含まれている場合、それらをソースとして使用して/etc/profileも意味がありません。インタラクティブbashセッションのセットアップはになければなりません.bashrc
ガイラ


0

私は実際に、以下を絶対に必要としない限り、ボックスを完全に再起動したくない人のために見つけました...

変更を/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[またはstopstartなんでも] を発行すると、コマンドがハングし、何も起きていないように見えることを覚えておいてください。これは、現在そのコンソール(別名ディスプレイ)0を使用しているため、コマンドが実行される前にデスクトップが使用されなくなるのを待っているため、完全にダウンして復帰することができないためです。

最後の注:ターミナルエミュレーターのデスクトップ内から環境で再起動を実行してから、別のコンソールに切り替えて再起動することはしませんでしたが、既にコンソールを切り替える場合は、コマンドを実行しないでくださいとにかくあるはずなので、そこから?


-4

echo "。.profile" >>〜/ .bashrc

そして、別のウィンドウを開きます。これは簡単なアプローチだと思います。


1
デフォルトの.profilesources .bashrcであるため、これはほとんどのユーザーにとってループになります。
ムル14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.