path_helperとzsh

path_helperとzsh

PATHAppleはシェル設定ファイルの最後に、より多くの変数バリアントをプッシュするのではなく、ディレクトリからパスのリストを読み、変数を自動的に拡張できるpath_helperようにバイナリを作成したことを読みました。PATH/etc/paths.d/

また、このファイルはcshとbash(-cおよび-s対応するフラグ)の出力のみを生成します。出力はありませんzsh(zshはbashとある程度互換性がありますが理解しています)。

zshを使用しています。私の/etc/zshenvファイルには次の行が含まれています。

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

端末または新しいタブを開くと、プロセスが完了するのに約0.5秒かかります。 1つのファイルにのみ単一のパス(/usr/X11/bin)があります。完全に削除すると、/etc/zshenvどのくらいのリスクを取る必要がありますか?上記のパスをmyまたはfileに入力すれば.zshrc十分ですか.zshenv

答え1

superuser.comで同様の質問をしたことがありますか? 接続ブログ投稿言いました(ほとんどの記事全体を引用しています)。

/usr/libexec/path_helperMac OS Xでは、ログインシェルを作成するたびにこれを実行しますが、これは非常に遅いです。 (特に私はSlowを考えています[[ "$NEWPATH" = *(*:)${p}*(:*) ]]。)ターミナルウィンドウが開くのに約4秒かかります。 /etc/paths.d からファイルを削除し、その内容を .bash_profile の $PATH に直接配置すると、端末ウィンドウがすぐに読み込まれます。

ディスカッションにはリンクも含まれています。Perlで書かれた置換、github.com/mgprot/path_helper(どのくらい速いのかわかりません。)

編集する:上記のブログ投稿のコメントを見ると -パッチpath_helperこれは問題を解決する別の方法でなければなりません。

答え2

私は次が新しい端末を起動する速度に影響を与えないことを知っています。しかし、それが私を尋ねたので、私は2セントを投げると思いました。

私はこの呼び出し(path_helper用)がzshenv(ログインシェルだけでなくすべてのシェルに対して呼び出されます)にあると思いますが、実際には問題があります。他のシェルの場合、path_helper 呼び出しは /etc/profile または /etc/csh.login にあり、ログインシェルに対してのみ呼び出されます。

zshで「screen」ユーティリティを実行すると問題になります。 'screen' はログインシェルを起動しませんが、呼び出しシェルから環境を継承します。しかし、まだ/ etc / zshenvとbu拡張path_helperを呼び出します。

実際、path_helperは/etc/paths.dからPATH候補を取得するだけでなく、呼び出し時に既存のPATHが存在する場合、そのPATHで積極的に動作します。つまり、/ etc /のコンポーネントを削除します。 pathsと/etc/paths.dを前に置きます。したがって、${USER}/bin または /usr/local/bin を PATH の先頭に入れると (自分のプログラムを最初に探そうとするので) Screen セッションでは動作しません。

私自身の問題を解決するために私が提案するのは、/etc/zshenvの名前を/etc/zprofile(現在存在しない)に変更することです。しかし、これが望ましくない影響を与えるのではないかと心配です。可能これがOS Xのzsh実装が/ etc / zshenvにこの呼び出しを持つ理由です。次のOSがリリースされると明らかに壊れ、すべての修正を忘れてしまいます。

他の人がこれを見たことがありますか?それともどんなアイデアがありますか?

関連情報