$ PATHに重複したアイテムに問題がありますか?

$ PATHに重複したアイテムに問題がありますか?

友達のbashrcを手に入れた。だから$PATH変数に重複する項目がありました。これにより、コマンドの開始に長い時間がかかるかどうかはわかりません。$PATHBashは内部的にどのように機能しますか?パスが多いと起動時間が遅くなりますか?

答え1

より多くのエントリが$PATH起動速度を直接遅くするわけではありませんが、シェルセッションで特定のコマンドが最初に実行されるたびに起動速度が遅くなります(bashがキャッシュを保持するため、コマンドが実行されるたびにそうではありません)。特に遅いファイルシステム(NFS、Samba、または他のネットワークファイルシステムやCygwinなど)がない限り、これらの速度低下はほとんど目に見えません。

重複したアイテムは視覚的に見ると少し迷惑で、より多くの$PATHコンテンツを見る必要があります。

重複したアイテムを追加するのを防ぐのは簡単です。

case ":$PATH:" in
  *":$new_entry:"*) :;; # already there
  *) PATH="$new_entry:$PATH";; # or PATH="$PATH:$new_entry"
esac

注:他人のシェルスクリプトを取得することは、彼らが書いたコードを実行することを意味します。つまり、友達にいつでもあなたのアカウントへのアクセスを許可することができます。

注:設定やその他の環境変数の正しい場所では.bashrcありません。環境変数は.see$PATHに設定する必要があります。~/.profileBashを使用して環境変数を設定するには、どの設定ファイルを使用する必要がありますか?.bashrcと.bash_profileの違い

答え2

awk人々は以下を使用してPATH変数から重複する項目を消去するのを見ました。

PATH=$(printf "%s" "$PATH" | awk -v RS=':' '!a[$1]++ { if (NR > 1) printf RS; printf $1 }')

これを自分のbashrcに追加して実行する前に、別のファイルが特定の場所にインポートされていることを確認できます。

別のオプションは、次のものを使用することです。これpathmerge便利です。

速度の質問に関しては、これはシェルの開始時間に大きな影響を与えませんが、コマンドの完了に時間を節約できます。特に、コマンドがパスに見つからず、検索中にそのフォルダを探す場合はさらにそうです。同じ道を繰り返し。

セキュリティに関する注意事項:あなたはする必要があります本物気づくザイルズの警告安全についてはこちらをご覧ください。他のユーザーが所有するファイルをインポートすると、そのユーザーがシェルを起動するたびに自分のユーザーとして自分のコードを実行するための無料パスを提供できます。これらのユーザーのパスワードを信頼していない場合は、そのシェルファイルをインポートしないでください。

答え3

@Gillesの答えに基づいて、これを関数にラップして入力を最小限に抑えることができます。

function addToPATH {
  case ":$PATH:" in
    *":$1:"*) :;; # already there
    *) PATH="$1:$PATH";; # or PATH="$PATH:$1"
  esac
}

addToPATH /Applications/AIRSDK_Compiler/bin
addToPATH ~/.local/lib/npm/bin

答え4

PATH操作(コロンで区切られたリスト操作)は簡単です。私は2000年にLinux Journalで説明されているStephen Collyerのbash_path_funcsを使います。

https://www.linuxjournal.com/article/3645 https://www.linuxjournal.com/article/376​​ 8 https://www.linuxjournal.com/article/3935

addpathこの関数は、最初にそのエントリがパスに存在しない場合にのみパスにエントリを追加します。delpath -nパスに存在しないディレクトリを削除します。

pathfunc.tgzからファイルを受け取ることができます。https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz

関連情報