UbuntuのPATH変数に/opt/texbin
フォルダーを追加するファイルを見つけようとしています。 /etc/environment
ファイルに存在しません。 Sudo grep -lr texbin . 2>/dev/null
は、/etc
フォルダーに何も出力しません。それでも、set -x
ファイルの先頭に/etc/zshenv
を追加すると、zshがこのファイルをソースする前に/opt/texbin
がPATHにあることがわかります。
何か案は?
このアプローチを試して、PATH変数の/opt/texbin
のソースを追跡します。
実際には読み込まれているファイルのリストを取得するには(たとえば、非標準ファイルは別のファイルから供給されている可能性があります!)、_ [SOMECODE]を指定してzsh
を呼び出すことができます。 _有効なオプション:
SOURCE_TRACE
PATH変数が機能する次のファイルを確認してください。
$ zsh -o sourcetrace
+/etc/zshenv:1> <sourcetrace>
+/home/user/.zshrc:1> <sourcetrace>
+/home/user/.zcompdump:1> <sourcetrace>
+/home/user/.zshrc-last:1> <sourcetrace>
zsh
は配列$ grep -ie "path.*=" files_from_step_1
を使用するため、大文字と小文字を区別しないことが重要です。配列$path
は、bashのようなコロンで区切られたリスト$PATH
に自動的に変換され、その逆も同様です。
それでも運が悪い場合は、/etc/zshenv
にデバッグメッセージを含めてみてください。コマンドは次の場所から最初に読み取られます。
print -l $path
これにより、zshが親プロセス(ディスプレイマネージャー、initプロセスなど)から継承するPATH変数の適切なリストが表示されます。*
パスが実際に開始プロセスから継承されている場合は、どのプロセスが関連しているかを知ることが重要です。
$ pstree -apH $$
これにより、シェルプロセス($$
のpid)が強調表示されたプロセスツリーが生成されます。これらのプロセスの構成ファイルも確認し、次の点に注意してください。
source /some/file
または. /some file
もPATHを変更できます/etc/profile
、ログオフして再度ログインすると、親プロセス(Xログオンマネージャー)の環境が古い可能性があります。+* あなたが書いたように、PATHには/opt/texbin
が読み取られる前にすでに/etc/zshenv
が含まれており、set -x
の/etc/zshenv
によってチェックされます。この手法では出力が得られませんが、ステップ3では、他のステップも回答に含めました。
+しばらく前にこの行動のためにひどく苦しんだ...
/etc/zshenv
がロードされたときに実行トレースまたはソーストレースをアクティブ化する正しい方法は、シェルコマンドでアクティブ化することです:zsh -l -o xtrace
、zsh -l -o sourcetrace
-パス要素はログイン時にのみ追加される可能性があるため、必ず-l
オプションを試してください。
これに加えて、/etc/zshenv
がロードされる前にまだパス要素が追加されている場合は、~/.pam_environment
ファイルを確認できます。これは/etc/environment
ファイルのユーザーローカルバージョンであり、シェルまたはユーザー環境の前にほぼ同時にロードされます。使用される形式の詳細については、manページ「pam_env」を確認してください。ユーザーファイルによって異なります。
もう1つの小さな可能性は、ENV
環境変数です。 SH互換シェルがSH互換モードで起動されると、パスがENV
にあるファイルが、何よりも先にスタートアップファイルとしてロードされます。詳細については、シェルのドキュメントを検索してください。 login.defs
は、ログイン時やさまざまなユーザー/ログインユーティリティでも使用されますが、/etc/environment
はすべての最新のログインシステムの標準であり、PATH
変数の確立に適しています。
ログイン時にシェルに渡されるPATH変数は、/etc/login.defs
で定義されます。ここには、ENV_SUPATHとENV_PATHの2つの設定があります。 rootとしてログインするかユーザーとしてログインするかに応じて、2つのうちの1つが環境変数PATHを介してシェルに渡されます。 PATH変数がシェルに渡された後、追加の変更はシェルの起動スクリプトによって制御されます。