Ubuntu 14.04を再起動すると、環境変数がデフォルトに戻り、毎回source .bash_profile
を実行する必要があり、非常に面倒です。私は通常、.bash_profile
にあるホームディレクトリの/home/buraktas
に環境変数を保持します。このファイルのテキスト:
### export Java_HOME variable
export Java_HOME=/usr/local/dev/jdk1.8.0_20
export PATH=$PATH:$Java_HOME/bin
### export M2_HOME
export M2_HOME=/usr/local/dev/maven
export PATH=$PATH:$M2_HOME/bin
### export SCALA_HOME
export SCALA_HOME=/usr/local/dev/scala-2.11.2
export PATH=$PATH:$SCALA_HOME/bin
あらゆる種類の対応に感謝します。
TL; DR:代わりにexport
コマンドを.profile
に入れ、.bash_profile
を削除または名前変更し、ログアウトして再びログインする変更を適用します。
ほとんどのデスクトップ環境は、デフォルトで構成されているため、グラフィカルにログインすると、ホームディレクトリの.profile
ファイルが取得されます。 Ubuntuのデフォルトのデスクトップ環境を使用しているようです。これはUnityを使用したGNOMEです。うまくいくはずです。
ほとんどの Bourneスタイルのシェル は、 login Shell として呼び出されたときに.profile
、もソースします。 これにはbashが含まれますが、.profile
と.bash_profile
が存在しない場合にのみ.bash_login
が供給されます。 .bash_profile
が存在する場合、それが使用されます。それ以外の場合、.bash_login
が存在する場合は、それが使用されます。それ以外の場合は、.profile
が使用されます。
これは、bashであるシェルに依存しないコマンド(ログイン時に実行するコマンド)が.profile
に移動でき、bash固有のコマンドがある場合は、それらのコマンドのいずれかに配置できるようにするためです。 2つのファイル。通常、.profile
または.bash_profile
内から.bash_login
をソースします。
.bash_profile
の唯一のコマンドが質問で示したものである場合、これらのコマンドはBourneスタイルのシェル間で移植可能であるため、.bash_profile
を使用する必要はまったくありません。その後、.bash_profile
を削除(または.bash_profile.old
などの名前に変更)し、それらのコマンドを.profile
に配置できます。彼らはそのファイルの一番下に行くことができ、必要に応じて最初にバックアップすることができます(バックアップの合理的な名前は.profile.old
または.profile.orig
かもしれませんが、実際には使用されていないのであなたが望むものに名前を付けることができます)。
.bash_profile
が存在しない場合(.bash_login
が提供されない場合)、.profile
が使用されます。 (.profile
はおそらくグラフィカルログインにすでに使用されています。)
.bash_profile
を削除または名前変更します。
.profile
を編集します。通常は次のようになります。
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
コードの11行すべて(空白行とコメントをカウントしない場合は6行)を.profile
の最後に追加し、ファイルを保存して、ログアウトして再度ログインするだけです。
これは完全にオプションですが、この機会を利用して リファクタリング のexport
ステートメントを作成することをお勧めします。現在使用しているもの:
### export Java_HOME variable
export Java_HOME=/usr/local/dev/jdk1.8.0_20
export PATH=$PATH:$Java_HOME/bin
### export M2_HOME
export M2_HOME=/usr/local/dev/maven
export PATH=$PATH:$M2_HOME/bin
### export SCALA_HOME
export SCALA_HOME=/usr/local/dev/scala-2.11.2
export PATH=$PATH:$SCALA_HOME/bin
PATH
が3回変更され、割り当てられている他の変数ごとに1回変更されます。これは大丈夫で、あなたが望むものかもしれません。しかし、この選択肢よりも長く、(私の意見では)自己文書化が少なくなります。
# export Java, Maven, and Scala homes and add their bins to PATH
export Java_HOME=/usr/local/dev/jdk1.8.0_20
export M2_HOME=/usr/local/dev/maven
export SCALA_HOME=/usr/local/dev/scala-2.11.2
export PATH=$PATH:$Java_HOME/bin:$M2_HOME/bin:$SCALA_HOME/bin
.bash_profile
が必要な場合(ただし、おそらく必要ありません)私がお勧めしたことは、 c0rp が以前に言ったことに非常に似ていることに注意する必要があります( コメント on 投稿 は削除されました):
すべての変数を
~/.profile
に配置し、~/.profile
から~/.bash_profile
をソースします。~/.profile
起動プロセスのデスクトップセッション中にDisplayManagerによって自動的に実行され、テキストコンソールからログインするときにlogin Shellによって実行されます 。
しかし、私の推奨事項は1つの重要な点で異なります。.bash_profile
ファイルはまったく必要ないと思われるため、邪魔にならないように移動(削除または名前変更)することをお勧めします。 .profile
で。
何らかの理由で.bash_profile
ファイルが必要な場合、環境変数の定義を避ける必要があります(グラフィカルログインではなく、bashログインにのみ適用されるため) 。
.bash_profile
ファイルに入れる必要があるbash固有のコマンドがある場合、c0rpが言ったように、この行を.bash_profile
ファイルに入れることができます。
. $HOME/.profile
その後、.bash_profile
は.profile
をソースとし、.profile
のコマンドはbashログインと非bashログインの両方で実行されます。
.profile
を使用しても機能しない場合その後、さらにトラブルシューティングが必要になりますが、次のことに注意する価値があります。
.profile
をソース;一部はそうではないようです。LightDMは.profile
をソースとしていないと人々が言うのを聞いたことがあります。 これは少なくとも一部のOSにパッケージ化されているので真実だと思います 。絶対に話をすることはできませんが、LightManagerをディスプレイマネージャーとして使用したUbuntuシステムでは、.profile
がグラフィカルセッションでになり、.profile
の変数エクスポートが有効になりました。
(Debianのような他のOSで私のためにいつも働いているわけではありません。)
.profile
を使用しても機能しない場合:簡単で汚れた代替手段変数定義に冗長性を持たせる場合は、.pam_environment
を簡単な代替手段として使用できます。
man pam_env
は、envfileでKEY=VAL
ペアとして環境変数を定義できることを説明します。そのマンページで説明されているように、デフォルトのシステム全体のenvfileは/etc/environment
であり、デフォルトのユーザーごとのenvfileは~/.pam_environment
です。
したがって、ホームディレクトリに.pam_environment
ファイルを作成し、その中に次のようなものを入れることができます。
Java_HOME="/usr/local/dev/jdk1.8.0_20"
M2_HOME="/usr/local/dev/maven"
SCALA_HOME="/usr/local/dev/scala-2.11.2"
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/dev/jdk1.8.0_20/bin:/usr/local/dev/maven/bin:/usr/local/dev/scala-2.11.2/bin"
ご覧のとおり、何かを変更するには複数の変更を行う必要があり、この高レベルの複製は読みにくく、理解するのも難しくなります。そのため、最初にこの方法を推奨しませんでした。
状況で最も簡単で自己文書化の方法は、上記のように.profile
で環境変数を定義してエクスポートすることです。
EnvironmentVariables 記事 は可能であると主張している 環境変数の値を変更し、さらに.pam_environment
のような構文で、PATH DEFAULT=${PATH}:${HOME}/MyPrograms
に他の環境変数の拡張を含めることもできます。しかし、これは (より)公式ドキュメントと完全に矛盾しているようです 、複数のマシンで成功せずに試しましたが、他のマシンでも失敗したと聞いたことがあります。 wiki作成者がpam_env "envfile"構文を pam_env "conffile"構文と混同していることを強く疑っています ( man pam_env
で使用されている用語を使用します)。うまくいけば、誰かが確実に見つけて、Wikiを(修正または明確化のために)編集できるようになることを願っています。
.bash_profile
が機能する理由OS Xは、デフォルトのグラフィカルデスクトップ(つまり、Terminal.appインスタンス)のターミナルのデフォルト構成が、非ログインシェルではなくログインシェルとしてシェルを起動する数少ない環境/システムの1つです。 ( Cygwin は別です。)
Terminal.appによって直接起動されたOS X上の各bashインスタンス(設定を変更していない限り)はログインシェルとして機能するため、.bash_profile
が取得されます。
Terminal.app(またはSSHセッションなどの非グラフィカルログイン)からアクセスされる環境以外では、.bash_profile
でのエクスポートも適用されないと思われます。
.bash_profile
に関しては、OS XとUbuntuの主な違いは次のとおりです。
OS Xでは、Terminal.appによって起動されたシェルはログインシェルとして起動されます。 bashはOS Xのデフォルトの対話型シェル(OS X 10.3以降)であるため、.bash_profile
が存在する場合はソースとなります。
Ubuntuでは、グラフィカルセッション内からGNOMEターミナル(または別のGUIターミナルエミュレータ)を実行すると、シェルは通常ログインシェルではなく起動します。ログインシェルによって実行されるタスクは、通常、グラフィカルセッションをセットアップするために(通常はディスプレイマネージャーによって)すでに実行されているため、それらを再度実行する必要はありません。
また、ログインに似たものが何も実行されていないときにログインシェルを起動することも少し奇妙です。