スクリプトで永続的な環境変数を設定する正しい方法

スクリプトで永続的な環境変数を設定する正しい方法

私のアプリケーションフレームワークに対して非常に簡単なインストールプロセスを実行したいと思います。すべてがうまくいきますが、2つの環境変数を設定したいと思います。変数を更新しPATHて設定したいですHOME

親プロセスにvarを設定できないことを知っていますが、どうすればよいですか?私はユーザーに実行を要求したくないのでsource foo、ユーザーがfoo installタスクを実行して完了できるようにしたいです。

もちろん方法はありませんか?

編集:申し訳ありません。実際の意味ではなく変数をHOME意味しましたMY_FRAMEWORK_HOME

ベストアンサー1

通常、変数は$HOMEユーザーが扱う必要はありません。ユーザーが突然別のホームディレクトリを持つことを望まない! (これを行うには、彼が設定したホームディレクトリを編集する必要があります。もちろん、権限が/etc/passwd必要です。)root

これは$PATH別のものであり、彼または~/.bashrcに設定する必要があります~/.bash_profile。どのパラメータを使用する必要があるかについてさまざまな意見がありますが、ここではこれについて議論しません。

/var/myapp/binユーザーのパスに追加したいとします。次の行を追加するだけです。

export PATH="$PATH:/var/myapp/bin"

~/.bashrcすでに存在する行を追加せずにこれを実行する良い方法について説明します。スタックvi交換:

ex -sc '$a
export PATH="$PATH:/var/myapp/bin"
.
$-,$!uniq
x' ~/.bashrc

この方法で複数の行を追加すると、すでに存在する場合は追加を防ぐための同じ安全チェックは機能しません。これには別のロジックが必要です。


また、他のワークフローを考慮することもできます。/usr/local/bin一般的にすでに$PATH

/var/myapp/binしたがって、上記の例のようにユーザーのPATHに追加するとします。最初にこれを実行する理由は、/var/myapp/binユーザーがコマンドラインから実行できるコマンド(シェルスクリプトまたはバイナリ、重要ではありません)があるためです。これらのコマンドはmyapp_commandと仮定しますmyapp_othercommand

次のようにシンボリックリンクを作成して、PATHで使用できるようにすることができます。

ln -s /var/myapp/bin/myapp_command /usr/local/bin/myapp_command
ln -s /var/myapp/bin/myapp_othercommand /usr/local/bin/myapp_othercommand

最初のパラメーターln -sはTARGET、2番目のパラメーターはターゲットを指す生成するLINKの名前です。 (詳細についてはを参照してくださいman ln。)

おすすめ記事