複数行構文を使用してPATHにパスを追加する

複数行構文を使用してPATHにパスを追加する

私が理解したのは、PATH環境変数にパスを追加する一般的な方法は、:文字で区切られたパスをリンクすることです。

たとえば、3 つのルートを追加するには、次の手順を実行する/my/path/1必要/my/path/2/my/path/3あります。

PATH=$PATH:/my/path/1:/my/path/2:/my/path/3

読むのは簡単ではありません。

どのような方法がありますか?定義または次へ追加PATH変数を使用するパス複数行構文?配列を使用しますか?私は次のようなものを探しています:

PATH = 
$PATH
/my/path/1
/my/path/2
/my/path/3

シェルに関連する興味深い解決策がある場合は、zshで解決策を探しています。

答え1

まったく興味深い解決策ではありませんが、移植性に優れています。

PATH=${PATH}:/my/path/1
PATH=${PATH}:/my/path/2
PATH=${PATH}:/my/path/3

答え2

zshでは$path配列です。

path=(
    $path
    ~/.local/bin
    ~/.gem/ruby/2.0.0/bin
)

注:pathすべて小文字です。

答え3

zshではうまくいくかもしれませんが、bashではうまくいきます。

PATH=$(paste -d ":" -s << EOF 
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF
)

編集する短く:

PATH=`paste -d ":" -s << EOF 
$PATH
/my/path/1
/my/path/2
/my/path/3
EOF`

そして、プロセスを生成しません。

new_path=(
"$PATH"
/my/path/1
/my/path/2
/my/path/3)
OLD_IFS="$IFS"
export IFS=":"
PATH="${new_path[*]}"
export IFS="$OLD_IFS"

二重引用符は、変数のスペースを保存し、IFSのシェル解釈を防ぐ$PATHために重要です。$IFS${new_path[*]}$OLD_IFS

アップデート2コメントと空白行の管理には sed を使用します。

PATH=`sed -e '/^#/'d -e '/^$/'d << EOF | paste -d ":" -s 
$PATH
/my/path/1
# This is a comment.
/my/path/2

/my/path/3
EOF`

コメント文字は行の最初の文字でなければならず、空行は完全に空でなければなりません。コメントの前と空白行でスペースとタブを管理するにsed -e '/^[ \t]*#/'d -e '/^[ \t]*$/'dは、代わりに(sedの実装によって異なる可能性があるため、テストするにはタブ)を使用します。

答え4

zsh でパスの末尾にディレクトリを追加するには:

path+=/my/path/1
path+=/my/path/2
path+=(/path/to/app/{i386,share}/bin)

持ち運べる:PATHにパスを正しく追加するには?

あなたはそれを使用することができますグローバル予選存在しないディレクトリまたはシンボリックリンクのエントリを除外します。セッション中に後でディレクトリを追加するかどうか(たとえば、ディレクトリがリモートファイルシステムにある場合など)に応じて、これが理想的でもそうでない場合もあります。path+=/my/path右側が文字列コンテキストにあるため、構文を使用してこれを行うことはできません。したがって、path+=(/my/path)各配列要素がリストのコンテキストで拡張されるため、ワイルドカードは発生しません。

path+=(/path/to/app/{i386,share}/bin(-/N))

関連情報