Ich möchte mein aktuelles Arbeitsverzeichnis mit seinen projektspezifischen bin
Verzeichnissen zu meinem $PATH hinzufügen, wenn die Verzeichnisse vorhanden sind.
Also fügte ich diese Zeilen zu meinem.zshrc:
[ -d "$(pwd)/vendor/bin" ] && export PATH="$(pwd)/vendor/bin":"$PATH"
[ -d "$(pwd)/node_modules/.bin" ] && export PATH="$(pwd)/node_modules/.bin":"$PATH"
Die oberen Pfade werden vorangestellt, wenn ich die Befehle manuell in das Terminal einfüge, sonst jedoch nicht. Das $PATH
ist das gleiche wie vorher. Ich habe auch verschiedene Schreibweisen ausprobiert, wie "${PATH}"
und die zsh- path
Funktion. Sie funktionieren alle, wenn sie manuell eingefügt werden, aber nicht, wenn sie sich innerhalb des.zshrcDatei.
--
Ich bin dabeimacOS High Sierra v10.13.6mit demStandardterminalund mitzsh v5.7.1.
Antwort1
Konkret zsh
könnten Sie Folgendes tun:
path[1,0]=( ~/projects/{vendor/,node_modules/.}bin(/N) )
Wo:
path[1,0]=( list )
fügt list
am Anfang des Arrays ein ( $path
in zsh
ist ein angebundenes Array $PATH
wie in csh
).
und (N/)
ist ein Glob-Qualifizierer, der den Glob N
aktiviert nullglob
und /
Dateien vom Typ Verzeichnis auswählt, sodass diese beiden Dateien vor dem $PATH
Hinzufügen hinzugefügt werden, sofern sie vorhanden sind und vom Typ sindVerzeichnis.
pwd
ist der Befehl, der p
das aktuelle Arbeitsverzeichnis (den Inhalt der Variable) druckt w
. d
Es $PWD
wäre nur sinnvoll $(pwd)
, oder eher $PWD
in Ihrem zu verwenden, wenn Sie Verzeichnisse bedingt zu dem .zshrc
hinzufügen möchten, von dem aus gestartet wird. Aber selbst dann wäre das gefährlich, denn wenn Sie beispielsweise von oder dem Verzeichnis einer anderen Person gestartet sind, könnte jemand dort schädliche Dateien platziert haben, die Standardbefehle wie oder außer Kraft setzen .$PATH
zsh
zsh
/tmp
ls
rm
Antwort2
ich glaube nicht, dass es möglich ist, das so zu machen, wie Sie es möchten, nicht mit .rc (.rc wird nur einmal ausgeführt, es wird später nicht mehr ausgeführt, es sei denn, Sie tun es ausdrücklich). Aber was ist mit zwei Aliasen?
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"
Damit können Sie Ihr aktuelles Verzeichnis jederzeit zum $PATH hinzufügen.
Antwort3
Wie andere bereits angemerkt haben, funktioniert Ihr Code nicht unbedingt wie erwartet, wenn Sie ein neues Terminal öffnen, da das aktuelle Arbeitsverzeichnis möglicherweise nicht dasjenige ist, das Ihre Projekte enthält, und dieser Codeabschnittnurwird ausgeführt, wenn eine neue Shell gestartet wird.
Stattdessen wissen Sie vermutlich, wo sich Ihre Projekte befinden, möglicherweise in Bezug auf Ihr $HOME
Verzeichnis. Wenn ja, können Sie stattdessen Folgendes verwenden:
for binpath in vendor/bin node_modules/.bin; do
if [ -d "$HOME/projects/$binpath" ]; then
PATH=$HOME/projects/$binpath:$PATH
fi
done
export PATH
Ich gehe davon aus, dass $HOME/projects
sich Ihre Projekte dort befinden.
Das export
am Ende ist wahrscheinlich nicht erforderlich, da PATH
es wahrscheinlich bereits exportiert wurde.