gnome/nautilus で実行される Bash スクリプトには環境変数はありません。

gnome/nautilus で実行される Bash スクリプトには環境変数はありません。

私の~/.bashrcと~/.profileでいくつかの変数をいくつかのファイルパスに設定しました.

export MY_VAR1="/path/to/somewhere"

私の〜/ bin /(PATHに追加)には、設定されている変数に依存するいくつかのスクリプトがあります。

端末でこのコマンドを実行すると、期待どおりに機能します。

ところで、ノーチラスでスクリプトをダブルクリックして実行しようとすると、まるでこれらの変数が設定されていないかのように実行されます。

GUIユーティリティを使用してスクリプトの1つをGnomeの「スタートアップアプリケーション」に追加したり、「メインメニュー」GUIユーティリティを使用してGnomeメニューに追加したりしても同じことが起こります。

ログイン時に実行される ~/.profile にこれらの変数を含めたので、 gnome と nautilus およびそれらが生成するプロセスがこれらの変数にアクセスできると考えたはずです。

GnomeとNautilusはどちらもログインしたユーザーとして実行されます。 ~ / binのすべてのスクリプトの上にbash shebangがあります。

私は初めてbashスクリプトに触れました。はっきりしたことがなくなったらすみません。私はDebian WheezyとGnome3を使っています。

答え1

これは、Xセッションを開始すると~/.bashrc合計を読み取らないためです~/.profile。通常、デスクトップ管理者は init スクリプトで root または独自のユーザーとして起動します。デスクトップマネージャの起動スクリプトに達すると、生成されたプロセスは通常initプロセスの環境を持ちます。 (この時点ではあまり成熟していないinitの実装については言及しません。)

ログインすると、その環境を継承する子プロセスが作成されます。子プロセスはuidとrunに権限を与え、/etc/X11/Xsession通常はすべてのスクリプトを実行します/etc/X11/Xsession.d。これらのスクリプトは通常、環境変数を設定するか、デスクトップ環境の呼び出しを具体的に変更します。

そのディレクトリから40x11-common_xsessionrc。すべてのGUIプロセスはこのプロセスで作成されるため。~/.xsessionrc/etc/X11/Xsession.d/etc/X11/Xsession.d~/.xsessionrc

~/.xsessionrcはスクリプトファイルなので、ソースコードを使用できますが、~/.bashrcこれは本当に悪いスタイルです。これは、DEソースコードがその環境を継承し、~/.bashrcbashソースコードを再利用して不要な副作用を引き起こす可能性があるためです。

~/.myenvironmentvariablesただし、厳密な(環境)変数定義を含め、ソースが含まれていることを使用する~/.bashrcことは完全に許可されています~/.xsessionrc。これにより、すべてのプロセスがで指定された変数~/.myenvironmentvariables、特にNautilusからダブルクリックしたシェルスクリプトを継承します。

関連情報