Linuxの複数のサービスとアプリケーションで使用するには、6つの変数を設定する必要があります。これまで環境変数を使用してきましたが、複数のユーザーにわたってこれを変更することは非常に複雑であることがわかりました。同時に、すべてのユーザーがグローバルに使用される変数を変更できることを願っています。
これまで私の解決策はSQLiteを使用することでしたが、サービスデーモンで変数を設定しようとすると少し混乱しているようです。
したがって、質問は、すべてのユーザーが変更できるグローバル環境変数を使用することが可能か現実的ですか、それともSQLiteなどのデータベースソリューションの使用を検討する必要がありますか?
たとえば、変数がある場合、IP_RECIPIENT
システムのすべてのユーザーはその変数にアクセスして設定する必要があります。変更された場合は、すべてのユーザーが変更を読み取ることができるはずです。つまり、変更もローカルではなくグローバルでなければなりません。
また、Arch Linux ARMでグローバル環境変数を使用するベストプラクティスは何ですか?
答え1
簡単な解決策は、これらの変数をファイルに設定し、ファイルをグローバルに書き込み可能にすることです/etc/bash.bashrc
。これにより、すべてのユーザーが変数を使用でき、ソースファイル内のすべての変更は再起動後も維持され、すべてのユーザーにも使用できます。新しいシェルが始まりました。開いているシェルの値は更新されません。
変数定義を含むファイルを生成して読み取れるように設定
printf "%s=%s\n%s=%s\n" "var1='foo'" "var2='bar'" | sudo tee /etc/variables sudo chmod a+w /etc/variables
これにより、次の名前のファイルが生成されます
/etc/variables
。var1='foo' var2='bar'
/etc/bash.bashrc
ファイルのソースにするために編集します。sudo printf "\n## Source global variables\n. /etc/variables\n" | sudo tee -a /etc/bash.bashrc
このファイルのすべての変更は、新しい対話型の非ログインシェルに反映されます。
オープンシェルを使用してもすぐに継承する必要がある場合は、bashのPROMPT_COMMAND
変数を使用できます。
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each
primary prompt.
次の行を編集し/etc/profile
て追加します。
PROMPT_COMMAND='. /etc/variables'
これが完了すると、/etc/variables
ファイルのすべての変更は各プロンプトが表示される前にファイルがインポートされるため、すべてのシェルですぐに使用できます。これはユーザーが再ログインした後にのみ適用されるため、もう一度/etc/profile
読む必要があります。