
私のアプリケーションフレームワークに対して非常に簡単なインストールプロセスを実行したいと思います。すべてがうまくいきますが、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
。)
答え2
ただ出口可変的な:
export NAME1="value1"
export NAME2="value2"
./my.install
編集:これは次のシェル(私が知っている)を介して行うことができます。
- スプリント
- 強く打つ
- ケンシハ
- ZTE
編集2:my.install
に進み、my.install.real
次の新しいファイルを作成しましたmy.install
。
export HOME='SAMPLE VALUE'
export PATH='SAMPLE VALUE'
./my.install.real
unset HOME
unset PATH