web-dev-qa-db-ja.com

ブート時に(スクリプトを介して)環境変数を設定するにはどうすればよいですか?

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

export THE_ENV_VAR=$(script_to_execute_and_use_stdout_from)
  • これを行う理由は、環境変数の設定に使用するコマンドの実行に時間がかかる(10秒程度)ためです。そのため、ブート後に一度だけ実行したいのです。とにかく、現在のところ、ブート時にコマンドの結果をキャッシュすることでこれを解決しました。これにより、後続の呼び出しが高速になり、envが使用されなくなります。すべての変数。

/etc/environmentで設定しようとしましたが、rhsをそのままコピーするだけです

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

アイデア?

5
Robert

~/.bash_profileまたは~/.bashrcに入れてください

gedit ~/.bashrc

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

それがうまくいかない場合は、さらに詳細、特にどの変数を設定し、どのような目的のために必要ですか?

3
Panther

これはおそらく良い方法ではありませんが、環境変数をカーネルパラメーターとして指定できます。 Linuxカーネル ドキュメント には、いくつかの適切な情報があります(太字の重要な段落):

引数リスト

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

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

ここで、「名前」は、関連する値(存在する場合)がカーネルのどの部分に与えられるかを識別するために使用される一意のキーワードです。現在のコードはキーワードごとに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」を使用することです。

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

これ AskUbuntuの回答には、カーネルブートパラメーターの変更方法に関する適切な指示があります。

1
wheeler

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

SYSTEM_FOO=barnone

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

help.ubuntu.com からの元の情報

0
frederickjh