$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"

コマンドを端末に手動で貼り付けると、上記のパスが前に追加されますが、そうでない場合はそうではありません。以前と同じです$PATH。また、"${PATH}"zshpath関数など、さまざまな作成方法も試しました。どちらも手動で貼り付けると機能しますが、内部では機能しません。.zshrc文書。

-

オンライン中macOS ハイシエラ v10.13.6そして基本端末そして使用zsh v5.7.1

答え1

具体的には、zsh次のようにできます。

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

どこ:

path[1,0]=( list )

list配列の先頭にを挿入します($pathinはinと同じ配列ですzsh)。$PATHcsh

globが有効になり、ディレクトリタイプのファイルを選択する(N/)glob修飾子です。したがって、対応する 2 つのファイルが存在し、タイプの場合は、前に追加します。Nnullglob/$PATH目次

pwdpwは、現在のorkingdディレクトリ(変数の内容)を印刷するコマンドです$PWD。しかし、これも危険です。たとえば、他の人のディレクトリから起動すると、誰かが同じ標準コマンドを無視する悪意のあるファイルをそこに植える可能性があります。$(pwd)$PWD.zshrc$PATHzshzsh/tmplsrm

答え2

.rcを使用せずに必要な方法で実行することは不可能だと思います(.rcは一度だけ実行され、特に実行しない限り後で実行されません)。しかし、別名が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

関連情報