私は aws cfn を使用して ubuntu インスタンスを起動しており、cfn 起動スクリプトで提供される変数をインスタンス上のスクリプトに渡す必要があります。たとえば、「db-server=db-2.domain.com」を渡すと、インスタンス上にこのアドレスを知りたいスクリプトが多数あります。
現時点では、/etc/profile.d に vars を設定するファイルを作成していますexport
が、これは bash がログイン シェルとして起動された場合にのみ機能し、これらの変数をどこにでも設定するには追加の操作が必要になります。
get-db-host.sh
そこで、代わりに /usr/local/bin に、たとえばコンテンツとして次のようなファイルを作成すればecho "db-2.domain.com"
、変更を加えることなく各スクリプトで使用できるようになるのではないかと考えました。
それは良いアプローチでしょうか?
答え1
それは良いアプローチでしょうか?
あなたが言及しているスクリプトはすべてシェル スクリプトであると確信しています。この場合、すべての変数を設定ファイルに入れるだけで済みます。
db-server=db-2.domain.com
それを標準の場所 (例: /usr/local/etc/myapp/
) に配置し、他のスクリプトでソースとして指定します。
. /usr/local/etc/myapp
もちろん、単に を使用することもできます/etc
。
答え2
推奨される方法は、変数を に追加することです/etc/environment
。このファイルはログイン時に読み込まれます(Ubuntu ドキュメント):
システム全体(特定のユーザーだけではなく)に影響を与える環境変数の設定は、システムまたはデスクトップセッションがロードされたときに実行される多くのシステムレベルのスクリプトのいずれにも配置しないでください。
/etc/environment - このファイルは、システム全体の環境変数設定専用です。これはスクリプト ファイルではなく、1 行に 1 つの割り当て式で構成されています。具体的には、このファイルにはシステム全体のロケールとパスの設定が保存されます。
/etc/environment/
編集して追加するだけです
db-server=db-2.domain.com
答え3
私はそのアイデアには反対します。そのディレクトリは、/usr/local/bin
ボックスのローカルにある実行可能ファイル用であり、通常は特定のパッケージの一部ではありません。
自分が行っている設定を謎めいたものにするのではなく、タスクを実行する必要がある可能性のある他の人にとって明らかに明らかな場所に変数を配置します。
私はそれらをディレクトリ内のファイルに入れて$HOME
、そのファイルを から単純にソースします$HOME/.bashrc
。
例
if [ -f $HOME/.my_aws_env ]; then
. $HOME/.my_aws_env
fi
または、クールでおしゃれな 1 行で実行することもできます。
[ -f $HOME/.my_aws_env ] && . $HOME/.my_aws_env