条件に応じて$pwdを$PATH変数に割り当てる

条件に応じて$pwdを$PATH変数に割り当てる

binディレクトリが存在する場合、プロジェクト固有のディレクトリを含む現在の作業ディレクトリを $PATH に追加したいと思います。

そこで私はこれらの行を.zshrc:

[ -d "$(pwd)/vendor/bin" ] && export PATH="$(pwd)/vendor/bin":"$PATH"
[ -d "$(pwd)/node_modules/.bin" ] && export PATH="$(pwd)/node_modules/.bin":"$PATH"

上のパスは、手動でターミナルにコマンドを貼り付けると先頭に追加されますが、それ以外の場合は追加されません。は前と同じです。また、 zsh関数$PATHのようにさまざまな書き方を試しました。手動で貼り付けるとすべて機能しますが、"${PATH}"path.zshrcファイル。

--

私は〜に乗っていますmacOS High Sierra v10.13.6とともにデフォルトターミナルそして使用5.7.1 の新機能

答え1

具体的にはzsh、次の操作を実行できます。

path[1,0]=( ~/projects/{vendor/,node_modules/.}bin(/N) )

どこ:

path[1,0]=( list )

list配列の先頭にを挿入します(は のように に結び付けられた配列です$path) 。zsh$PATHcsh

(N/)glob修飾子で、globをN有効にしてディレクトリタイプのファイルを選択するので、それらが存在し、タイプであることを示すために、それらの2つのファイルを追加します。nullglob/$PATHディレクトリ

pwdpは、現在のw作業dディレクトリ (変数の内容$PWD)を印刷するコマンドであるため、 が開始した場所に条件付きでディレクトリを追加したい場合に$(pwd)のみ、 またはを使用するのが合理的です。しかし、その場合でも、たとえばまたは他のユーザーのディレクトリから開始した場合、誰かがそこにまたはなどの標準$PWDコマンドを無効にする悪意のあるファイルを埋め込む可能性があるため、危険です。.zshrc$PATHzshzsh/tmplsrm

答え2

.rc では、希望どおりに実行できないと思います (.rc は 1 回だけ実行され、明示的に指定しない限り、後で実行されることはありません)。しかし、エイリアスが 2 つある場合はどうでしょうか?

backupPATH=$PATH
function mkpath {
    [ -d "$(pwd)/vendor/bin" ] && export PATH="$(pwd)/vendor/bin":"$PATH"
    [ -d "$(pwd)/node_modules/.bin" ] && export PATH="$(pwd)/node_modules/.bin":"$PATH"
}
alias resetpath="PATH=$backupPATH"

これにより、現在のディレクトリをいつでも $PATH に追加できます。

答え3

他の人が指摘しているように、新しいターミナルを開いたときに、現在の作業ディレクトリがプロジェクトを含むディレクトリではない可能性があり、そのコードの一部がのみ新しいシェルが起動したときに実行されます。

代わりに、おそらくディレクトリに関連して、プロジェクトがどこにあるか知っているはずです$HOME。その場合は、代わりに以下を使用できます。

for binpath in vendor/bin node_modules/.bin; do
    if [ -d "$HOME/projects/$binpath" ]; then
        PATH=$HOME/projects/$binpath:$PATH
    fi
done

export PATH

$HOME/projectsここでは、あなたのプロジェクトがそこにあると想定しています。

末尾のは、すでにエクスポートされている可能性が高いexportため、おそらく必要ありませんPATH

関連情報