同じパスを複数回追加することなく、システム全体または個々のユーザー向けに$PATHに追加する方法が必要です。
これを実行する理由の1つは、.bashrc
で追加できるようにするためです。 、ログインを必要とせず、lightdm
を使用するシステムでもより便利です(例:) 、.profile
を呼び出すことはありません 。
$ PATHから重複を削除する方法に関する質問を知っていますが、重複を削除したくない 。 パスがまだ存在しない場合にのみパスを追加する方法を教えてください。
承認された回答:
追加する新しいパスは次のとおりです。
new=/opt/bin
次に、任意のPOSIXシェルを使用して、new
かどうかをテストできます。 はすでにパスにあり、そうでない場合は追加します:
case ":${PATH:=$new}:" in
*:"$new":*) ;;
*) PATH="$new:$PATH" ;;
esac
コロンの使用に注意してください。コロンがないと、たとえばnew=/bin
と考えるかもしれません。 /usr/bin
でパターンが一致したため、すでにパスに含まれていました 。 PATHには通常多くの要素がありますが、PATH内の0個と1個の要素の特殊なケースも処理されます。 PATHが最初に要素を持たない(空である)場合は、${PATH:=$new}
を使用して処理されます。 PATH
を割り当てます $new
へ 空の場合。この方法でパラメータのデフォルト値を設定することは、すべてのPOSIXシェルの機能です。POSIXドキュメントのセクション2.6.2を参照してください。)
呼び出し可能な関数
便宜上、上記のコードを関数に入れることができます。この関数はコマンドラインで定義するか、永続的に使用できるようにするために、シェルの初期化スクリプトに組み込むことができます(bashユーザーの場合は~/.bashrc
):
pupdate() { case ":${PATH:=$1}:" in *:"$1":*) ;; *) PATH="$1:$PATH" ;; esac; }
このパス更新機能を使用して、現在のPATHにディレクトリを追加するには:
pupdate /new/path