質問の動機は次のとおりです。
UnityデスクトップでUbuntu 12.04 LTS 2を使用しています。.bashrcファイルで、PATH変数にいくつかのディレクトリを追加し、JAVA_HOMEなどのいくつかの環境変数を定義します。端末(bash、デフォルトのシェルを実行)からアプリケーションを起動すると、これはうまく機能しますが、Unityランチャーを使用するいくつかのショートカットでは、#!/ bin / shを使用するように定義されているように見えるアプリを実行します。は/ bin / dashのエイリアスであり、〜/ .bashrcまたは〜/ .profileの内容を取得しません。
これらのショートカットをすべて変更して、/ bin / shの代わりに/ bin / bashを使用して、強制的に.bashrcの変更を反映させることができると思いますが、それは本当にハックに思えます。
Ubuntu 12.04(デフォルト)が/ bin / shを/ bin / dashにエイリアスし、デフォルトのシェルが/ bin / bashである場合、PATHを変更し、必要に応じて環境変数を定義できる単一の場所がありますこれらすべての状況下で存在するために:
- 非ログインbashシェルを作成するときはいつでも(端末を単一で使用して)
- ログインbashシェルを作成するとき(たとえば、sshを介してリモートでログインするとき)
- Unityアプリケーションランチャーを使用する場合(ランチャーが/ bin / shを使用する場合)。
- cronジョブが実行されるとき(/ SHELL = / bin / shが/ etc / crontabにある場合)。
私が正しく理解していれば、私はそれを推測しています:
- (1)/(2)はbashであり、(3)/(4)はダッシュであるため、(1)/(2)と(3)/(4)は異なります。
- (1)と(2)は、ログインシェルであるかどうかによって、bashがロードすることを選択するファイルが異なるため、異なります。
- (3)と(4)は異なります。これは、(3)がログインした後のある時点で表示されるためです(したがって、〜/ .profileは、親プロセスの1つがソースとなり、(4)は、ログインしていないため、〜/ .profileは読み込まれません。
(シェルがインタラクティブであるかどうかなど、他の要因も重要であっても私は驚かないでしょう。そのため、おそらく予想もしなかった組み合わせがさらにあるでしょう...私は私の質問を「改善しました」 「その場合。)
私はある時点で、誰かがシェルに依存しない方法(または少なくともダッシュ/バッシュ互換の方法)で環境変数を変更する方法/場所を説明する何らかのガイドを作成したに違いないことを期待します...そのようなガイドを見つけるために適切な検索用語を見つけるようです。
ソリューションまたはソリューションへのポインタは大歓迎です!
更新しました:
- 明確化:これは、12.04のインストールプロセスで作成されたデフォルトのUbuntuユーザーなので、特別なことは何もありません。それはありませんので、全く何の.bash_profileはありません... .bashrcに、の.bash_history、および.bash_logoutされていない〜/ .profileに(明示的にソースは、〜/ .bashrcのことを)持っている、とだけ〜/ .bash *が存在するファイル。
- スコープ重視:私は本当にデフォルト対話型シェル(bashの)および(ダッシュにエイリアス)使用/ binに/ SHに起こる任意のスクリプト以外の任意のシェルを気にしないので、何もしてこれを複雑にする必要はありません余分のためには、 tcsh / ksh / zsh / etc。サポート。