ZSHのPATH変数に新しいエントリを追加する


188

私はzshを使用/home/david/pear/binしており、PATH変数に新しいエントリ()を追加しようとしていますが、方法がわかりません。

私を最も混乱させるのPATHは、~/.zshrcファイル内の変数への単一の参照が存在しないことですが、実行すると以下がecho $PATH返されます。

/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

したがって、PATH変数がどこかに設定されています。

回答:


213

ここで、次の行を追加し.zshrcます。

export PATH=/home/david/pear/bin:$PATH

編集:これは機能しますが、ZSHがのような変数に提供する構造化インターフェースを利用するため、以下のオニーの答えはより優れています$PATH。このアプローチはの標準ですがbash、私の知る限り、ZSHがより優れた代替手段を提供する場合にこのアプローチを使用する理由はありません。


29
忘れてください、それはコンソールコマンドにすぎませんでしたが、その行を.zshrcに追加するとうまくいきました。どうもありがとう!
デビッドバレット

1
私の.zshrcにはすでにエクスポートPATHの行があったため、変更した行に置き換えました。
ザックヒューストン2014

6
私は、エントリすなわち周りに二重引用符を削除する必要がありましたPATH="/home/david/pear/bin:/usr/bin:etc"PATH=/home/david/pear/bin:/usr/bin:etc、それはzshrcに滞在するために。
a7omiton 2015

3
@ taco、$ HOMEを使用できます
mencargo 2015年

1
@DanielSpringer:はい。シェルを開くと、シェルはそれPATHを開始した親プロセスから継承し、それが実行されると.zshrc(または.bashrcその他)、そのパスに追加の要素を追加できます。
Linuxios

224

実際、ZSHを使用すると、環境変数の特別なマッピングを使用できます。だからあなたは単に行うことができます:

# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH

私にとってそれは他の変数に伝播することができる非常にきちんとした機能です。例:

typeset -T LD_LIBRARY_PATH ld_library_path :

16
素敵な答え。私の場合、~/.zshrcはの後.profileに供給され、のすべてを上書きします.profile。私の髪を引っ張って理解するのにしばらくかかりました。
カーングエン2014

1
複数の要素を追加するのでない限り、appendケースは括弧を必要としません。多くの場合、引用符は必要ありません。したがって、追加する簡単で短い方法は次のとおりです
ミカエリオット2015年

1
@SuperUberDuper、ほとんどすべてのUNIXシェルは、対話的にシェルに入力する場合とほぼ同じように起動ファイルを読み取るだけであることを理解する必要があります。「rc」ファイルについては、この質問
ony

6
これは、と明示的な輸出を回避することが可能だ-xとして変数に一意の値だけを残す-Uことができるように、コロンはデフォルトで想定され、:typeset -TUx PATH path
悲しみ

2
@DanielSpringer、いいえ。それらの用語でそれが必要な場合:(path=(...)参照$pathまたは$PATH内部なしで)割り当て、path=(... $path)先頭にpath+(...)追加、追加します。
ony

40

PATH最小限の方法でに追加できます。複数の要素を追加する場合を除き、括弧は不要です。また、通常、引用符は必要ありません。したがって、追加する簡単で短い方法は次のとおりです。

path+=/some/new/bin/dir

一般的な使用法

次に、新しいスクリプト/実行可能ファイルをテストするための一般的なパターンは次のようになります。

path+=$PWD/.
# or
path+=$PWD/bin

この小文字の構文は配列pathとして使用されますが、同等の大文字のパートナーにも影響します(これはを介して「バインド」されます)。PATHtypeset

セパレーターとして必要ない:/望まないことに注意してください。)

関連する一口

pathこの方法で(配列として)処理すると、新たにパスされたコマンドを見つけるためにarehash実行する必要がなくなり ます。

vared path編集path などの動的な方法としても見てください。

pathこの質問だけに興味があるかもしれませんが、ここではエクスポートと配列について話しているので、配列は一般にエクスポートできないことに注意してください

重複したエントリをとらないようにPATHすることもできますこれこれを参照 ):

typeset -U path

「path + =:/ foo / bar」ではないのですか?(コロン付き)
アンドリューlorien '19

1
@andrewlorienコロン区切り文字の詳細で回答を更新しました。
ミカエリオット

パスの後にコメントがある場合は、のように引用符が必要path+='my/path' # for funです。スペースがあるかどうかは明らかですが、コメントがある場合はそれほどではありません。
フランクリンYu

「(:は区切り文字として必要とされないことに注意してください。)」これは小文字の場合にのみ当てはまりますpath。.zshrc:PATHPATH+=:/Users/path/to/my/folder
Emmett R.

37

1つのライナー、~/.zshrcファイルを開かない

echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc

または

echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc

効果を確認するにsource ~/.zshrcは、同じタブで行うか、新しいタブを開きます


1
Zshシェルを使用してOSXで完全に動作しました。
ストライカー2018

1
魅力のように働いた!
Akbar Sha Ebrahim

14
  1. 〜/ .zshrcへのパスを追加

    sudo vi ~/.zshrc

    新しいパスを追加

    export PATH="$PATH:[NEW_DIRECTORY]/bin"
  2. 〜/ .zshrcを更新

    〜/ .zshrcを保存

    source ~/.zshrc

  3. パスを確認

    echo $PATH


2
これがBash道です。
CousinCocaine

13

オプション1:次の行を〜/ .zshrcに追加します。

export "PATH=$HOME/pear/bin:$PATH"

その後source ~/.zshrc、変更を有効にするために実行するか、このウィンドウを閉じて新しいウィンドウを開く必要があります

オプション2:端末コンソール内で実行して、このパスを現在の端末ウィンドウセッションにのみ追加します。ウィンドウ/セッションを閉じると、失われます。


この回答が5年前に投稿さた同じ回答とどのように異なるかについて詳しく説明できますか?
フランクリンユー

この回答で、あなたがそれが現在のウィンドウにのみ変更されますそのようにあなたはそれを実行した場合、ファイルへのコード行を追加することが必要であること言われていない、これはオリジナルの答えで説明されていません
ディミタール
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.