web-dev-qa-db-ja.com

ZSH:起動したアプリケーションが環境変数を取得できるように、環境変数をどこに配置しますか?

GUIアプリケーションを起動する前に、環境変数KEY="value"を利用できるようにする必要があります。ランチャーファイル(Ubuntuのデスクトップとサイドバーにアイコンを配置するファイル)の値はExec=/path/to/executable/fileです。

ZSHを使用する場合、アプリケーションランチャーをクリックするか、シェルに/ path/to/executeable/fileと直接入力するかにかかわらず、そのアプリケーションで使用できるように、この変数をどこに定義する必要がありますか?

コマンドラインプロンプトで、ランチャーをクリックする前にKEY="value"export KEY="value"の両方を入力しようとしましたが、機能しなかったようです。また、~/.zshrcでこれらの行の両方を試し、シェルからsource ~/.zshrcを実行してから、ランチャーをもう一度クリックしましたが、それも機能しませんでした。

どのファイルに入れるべきですか? ~/.zshenv~/.zprofile~/.zshrc、および~/.zloginの選択肢があると思います。

(ボーナスポイントについては、exportを使用する必要がありますか?)

(ランチャーから起動されたときに変数がアプリケーションで使用可能になる前に、少なくともログアウトして再度ログインする必要がありますか?)

4
user779159

ターミナルシェル(インタラクティブな非ログインシェル)およびデスクトップランチャーアイコン(Xサーバーが開始されている)でも変数を定義する必要があるため非対話型ログインシェル)によって、定義を~/.zshenvに配置する必要があります。

はい。デスクトップアイコンで新しい環境を利用できるようにするには、xセッションを再起動する必要があります。このような起動スキームを想像してみてください:Graphical Login -> Use your default Shell to start the X session -> Desktop -> Shell terminal / Launch program via icon、それで子シェルはXセッションを開始するために使用される親から環境を継承します。そのシェルは、Xセッションへのログイン時にRCファイルを1回だけ読み取ります。

ボーナスポイントの場合。これはマニュアルが言っていることです:

export [ name[=value] ... ]指定された名前は、後で実行されるコマンドの環境への自動エクスポート用にマークされています。 (...)

変数を~/.zshenvで定義する場合、このファイルはデフォルトで読み込まれるため、原則としてexportを省略できます。唯一の違いは、RCファイルをソースしないzsh -fでシェルを開始した場合に発生します。ちょっとしたデモンストレーション:

% foo=foo_defined
% export bar=bar_defined
% print -l $foo $bar
foo_defined
bar_defined
% zsh -f
% print -l $foo $bar
bar_defined
% 

I.e。エクスポートされた$barのみが、後続のシェルで定義されます。しかし、念のため、exportを使用してください。これが有害な場合は考えられません。

5
mpy

@mpyが正しいとは思わないので、exportステートメントを省略できます。エクスポートの有無によって、そのシェルから起動されたプロセスが環境変数を継承するかどうかが決まります。エクスポートしない場合、xserverは環境変数を継承しません

 imalison  ~  ABCD='14'
 imalison  ~  python -c "import os; print os.environ.get('ABCD')"
None
 imalison  ~  export ABCD='14'
 imalison  ~  python -c "import os; print os.environ.get('ABCD')"
14
0
imalison