まだ存在しない場合にのみ、zshのPATHにディレクトリを追加する方法はありますか?


15

zshに、PATHがまだ存在しない場合にのみ、PATHにディレクトリを追加する簡単な方法はありますか?(または、より一般的には、環境変数)。私はもう試した:

PATH+=/my/directory

...しかし、それが2回実行されると、2回追加されます。


2
@uther、それは他の質問がbashに関するものだったので、これは重複ではありませんが、これはこの問題に対処する独自の方法を持っているzshに関するものです
ステファンシャゼル

回答:


32

In zsh $PATHは配列に関連付けられています(を参照typeset -T$path。次のようにして、その配列に一意の値を強制できます。

typeset -U path

次に、次のパスを追加します。

path+=(~/foo)

それが既にあった場合、心配する必要はありません。

前面に追加するには、次のようにします。

path=(~/foo "$path[@]")

または:

path[1,0]=~/foo

~/foo既に$pathその中にあった場合、それを前面に移動します。


じゃないtypeset -Ug path?ファイルで使用するtypeset -U pathと、~/.zshrczshrcの実行中にパスに何もないというエラーが常に返されます
-kalbasit

@eMxyzptlk、奇妙な。-gスコープの制限を避けることですが、~/.zshrcでは、スコープはすでにグローバルです。また、zsh空について文句を言うのを見たこともありません$PATH(もちろん、コマンドが見つからないというエラーを除きます)。
ステファンシャゼル

3

export -U PATH=~/foo${PATH:+:$PATH}スタートアップファイルの1つに追加します。-Uアレイまたは特定の値の最初の出現保持:PATHのような区切り変数。


-3

次のようなことをする必要があります。

if echo $PATH | grep :newpath: ; then doIfPresent; else doIfMissing; fi

これnewpathは、2つの「:」で区切られている場合にのみ機能し、同様に先頭または末尾にある場合を考慮する必要があります。

ほら


1
Bourne / POSIX機能のみを使用して、シェル内でそれを行うことができます。これにより、クォートの頭痛を避けることができます(少なくとも、変数の置換を二重引用符で囲むようにしてecho "$PATH"ください)。case ":$PATH:" in *:/new/directory:*) :;; *) PATH=$PATH:/new/directory;; esac
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.