起動時に環境変数を設定するにはどうすればよいですか (スクリプト経由)?

起動時に環境変数を設定するにはどうすればよいですか (スクリプト経由)?

Ubuntu マシン (10.04) で (起動時に) いくつかの環境変数を設定したいのですが、次のようなスクリプトを使用して値を作成したいと考えています。

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • これを実行する理由は、環境変数を設定するために使用されるコマンドの実行に長い時間がかかる (10 秒程度) ため、起動後に 1 回だけ実行したいからです。いずれにせよ、現在は起動時にコマンドの結果をキャッシュすることでこの問題を解決し、後続の呼び出しが高速化されるようにして、env. 変数をまったく使用しないようにしています。

を設定してみました/etc/environmentが、右辺のみをそのままコピーするだけです

起動時にスクリプトを実行しようとしました/etc/init.d/が、うまくいかないようです。

アイデアは?

答え1

起動時に使用できるシステム全体の環境変数を設定するには、それらを に配置します/etc/environment。このファイルはスクリプト ファイルではなく、1 行に 1 つの割り当て式で構成されます。次のようになります。

SYSTEM_FOO=barnone

注記: 変数の展開は /etc/environment では機能しません。

元の情報ヘルプ

答え2

それを入れる~/.bash_profile~/.bashrc

gedit ~/.bashrc

非対話型シェル (スクリプト) でこれらの変数を使用する必要がある場合は .bash_profile を使用し、シェルで変数を設定する場合は ~/.bashrc を使用します。

それでも問題が解決しない場合は、さらに詳しい情報が必要です。特に、どのような変数をどのような目的で設定していますか?

答え3

これはあまり良い方法ではないかもしれませんが、環境変数をカーネルパラメータとして指定することができます。Linuxカーネルドキュメンテーションこれについては、いくつか有益な情報があります (重要な段落は太字で表示)。

引数リスト

カーネルのコマンド ラインは、スペースで区切られた文字列 (ブート引数) のリストに解析されます。ほとんどのブート引数は次の形式になります。

 name[=value_1][,value_2]...[,value_10]

ここで、「name」は、カーネルのどの部分に関連付ける値 (存在する場合) を与えるかを識別するために使用される一意のキーワードです。現在のコードでは、キーワードごとにカンマで区切られた 10 個のパラメータのみを処理するため、10 という制限は実際であることに注意してください。(ただし、非常に複雑な状況では、セットアップ関数がサポートしている場合、最大 10 個の追加パラメータを使用して同じキーワードを再利用できます。)

ソートのほとんどはカーネル ソース ファイル init/main.c にコード化されています。まず、カーネルは引数が特殊引数 'root='、'nfsroot='、'nfsaddrs='、'ro'、'rw'、'debug'、または 'init' のいずれかであるかどうかを確認します。これらの特殊引数の意味については、以下で説明します。

次に、セットアップ関数のリストを調べて、指定された引数文字列 (「foo」など) が特定のデバイスまたはカーネルの一部のセットアップ関数 (「foo_setup()」) に関連付けられているかどうかを確認します。カーネルに foo=3,4,5,6 という行を渡すと、カーネルは bootsetups 配列を検索して「foo」が登録されているかどうかを確認します。登録されている場合は、「foo」に関連付けられたセットアップ関数 (foo_setup()) を呼び出し、カーネルのコマンド ラインで指定された引数 3、4、5、6 を渡します。

上記のようにセットアップ関数として受け入れられない 'foo=bar' 形式のものはすべて、設定する環境変数として解釈されます。
(役に立たない?) 例としては、ブート引数として 'TERM=vt100' を使用することが挙げられます。

カーネルによって取得されず、環境変数として解釈されなかった残りの引数は、通常 init(1) プログラムである PID 1 に渡されます。init プロセスに渡される最も一般的な引数は、コンピュータをシングル ユーザー モードで起動し、通常のデーモンをすべて起動しないように指示する「single」という単語です。システムにインストールされている init(1) のバージョンのマニュアル ページをチェックして、どのような引数が受け入れられるかを確認してください。

これAskUbuntu の回答には、カーネル ブート パラメータを変更する方法に関する優れた手順が記載されています。

答え4

コマンドを に入力します/etc/rc.local。先頭のコメントを必ず読んでください。

関連情報