質問: pathにパスを正しく追加するにはどうすればよいですか? 新しいパスをpath環境変数に追加する必要がある場所を知りたいのですが。これは.bashrc(たとえば)を編集することで実現できることはわかっていますが、その方法は明確ではありません。こちらです:export path=~/opt/bin:$path それともこれ?export path=$path:~/opt/bin
回答: path=/a/b:$pathを使用すると、pathへのパスを追加する「正しくない」方法と見なされる場合があります。 実際にはディレクトリではないパスを追加します。 同じ形式でpathにすでにあるパスを追加します。 相対パスを追加します(検索される実際のディレクトリは、現在の作業ディレクトリを変更すると変わるため)。 すでにpathにあるパスを別の形式で追加します(つまり、シンボリックリンクまたは..を使用することによるエイリアス)。 4を行わない場合は、pathの他のエントリを上書きするために、パスをpathの前に移動しないでください。 この(bashのみの)関数は、上記の状況(例外を除き、以下を参照)で「正しいこと」を実行し、エラーコードを返し、人間に対してniceメッセージを出力します。エラーコードとメッセージは、不要な場合は無効にできます。prepath() { local usage="\ usage: prepath [-f] [-n] [-q] dir -f force dir to front of path even if already in path -n nonexistent dirs do not return error status -q quiet mode" local tofront=false errcode=1 qecho=echo while true; do case "$1" in -f) tofront=true; shift;; -n) errcode=0; shift;; -q) qecho=':'; shift;; *) break;; esac; done # bad params always produce message and error code [[ -z $1 ]] && { echo 1>&2 "$usage"; return 1; } [[ -d $1 ]] || { $qecho 1>&2 "$1 is not a directory."; return $errcode; } dir="$(command cd "$1"; pwd -p)" if [[ :$path: =~ :$dir: ]]; then $tofront || { $qecho 1>&2 "$dir already in path."; return 0; } path="${path#$dir:}" # remove if at start path="${path%:$dir}" # remove if at end path="${path//:$dir:/:}" # remove if in middle fi path="$dir:$path" } 例外は、この関数は他の方法でpathに追加されたパスを正規化しないため、パスの非正規エイリアスがpathにある場合、重複が追加されます。相対パスはpathに渡されたときに明らかな意味がありますが、既にパス内にある場合、現在の作業ディレクトリが何であるかわからないため、すでにprepathにあるパスを正規化しようとするのは難しい提案です。追加されたとき。