変数を設定して読み取る最良の方法

変数を設定して読み取る最良の方法

Linuxの複数のサービスとアプリケーションで使用するには、6つの変数を設定する必要があります。これまで環境変数を使用してきましたが、複数のユーザーにわたってこれを変更することは非常に複雑であることがわかりました。同時に、すべてのユーザーがグローバルに使用される変数を変更できることを願っています。

これまで私の解決策はSQLiteを使用することでしたが、サービスデーモンで変数を設定しようとすると少し混乱しているようです。

したがって、質問は、すべてのユーザーが変更できるグローバル環境変数を使用することが可能か現実的ですか、それともSQLiteなどのデータベースソリューションの使用を検討する必要がありますか?

たとえば、変数がある場合、IP_RECIPIENTシステムのすべてのユーザーはその変数にアクセスして設定する必要があります。変更された場合は、すべてのユーザーが変更を読み取ることができるはずです。つまり、変更もローカルではなくグローバルでなければなりません。

また、Arch Linux ARMでグローバル環境変数を使用するベストプラクティスは何ですか?

答え1

簡単な解決策は、これらの変数をファイルに設定し、ファイルをグローバルに書き込み可能にすることです/etc/bash.bashrc。これにより、すべてのユーザーが変数を使用でき、ソースファイル内のすべての変更は再起動後も維持され、すべてのユーザーにも使用できます。新しいシェルが始まりました。開いているシェルの値は更新されません。

  1. 変数定義を含むファイルを生成して読み取れるように設定

    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'
    
  2. /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読む必要があります。

関連情報