アプリフレームワークの非常に簡単なインストールプロセスを実行したいと思います。すべてが機能していますが、2つの環境変数を設定したいと思います。を更新しPATH
、HOME
変数も設定したい。
親プロセスに変数を設定できないことはわかっていますが、どうすればよいですか?私はユーザーに実行を要求したくありませんsource foo
、私は彼らがただ実行することができてfoo install
、そして行為が行われることを望みます。
確かに、いくつかの方法がありますか?
編集:申し訳ありません-私は実際HOME
を意味するのではなく、MY_FRAMEWORK_HOME
変数を意味します!
$HOME
変数は、一般的に、あなたは混乱とすべきものではありません。それはユーザーに依存します。ユーザーが突然別のホームディレクトリを持つことを望まないでしょう!(そうする場合は、に設定されている彼のホームディレクトリを編集/etc/passwd
する必要がありroot
ます。もちろんこれにはアクセス許可が必要です。)
これ$PATH
は別の問題であり、彼~/.bashrc
またはに設定する必要があります~/.bash_profile
。どちらを使用すべきかについてはさまざまな議論がありますが、ここでは取り上げません。
/var/myapp/bin
ユーザーのパスに追加したいとします。次の行を追加することでこれを行うことができます:
export PATH="$PATH:/var/myapp/bin"
ユーザーのに~/.bashrc
。それがすでにある場合は行を追加することを避けながらこれを行う良い方法はstackexchangeで議論されてい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
。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加