Quero adicionar meu diretório de trabalho atual com seus bin
diretórios específicos do projeto ao meu $PATH quando os diretórios estiverem presentes.
Então eu adicionei essas linhas ao meu.zshrc:
[ -d "$(pwd)/vendor/bin" ] && export PATH="$(pwd)/vendor/bin":"$PATH"
[ -d "$(pwd)/node_modules/.bin" ] && export PATH="$(pwd)/node_modules/.bin":"$PATH"
Os caminhos superiores são acrescentados quando colo manualmente os comandos no terminal, mas, caso contrário, não são. O $PATH
é o mesmo de antes. Também tentei diferentes maneiras de escrever como "${PATH}"
a função zsh path
. Todos eles funcionam quando colados manualmente, mas não quando dentro do.zshrcarquivo.
--
Estou dentromacOS High Sierra v10.13.6com oTerminal padrãoe usandozsh v5.7.1.
Responder1
Especificamente zsh
, você poderia fazer:
path[1,0]=( ~/projects/{vendor/,node_modules/.}bin(/N) )
Onde:
path[1,0]=( list )
insere the list
no início do array ( $path
in zsh
é um array vinculado a $PATH
like in csh
).
e (N/)
é um qualificador glob onde N
habilita nullglob
o glob e /
seleciona arquivos do tipo diretório, então ele adiciona esses dois arquivos antes de $PATH
fornecer que eles existam e sejam do tipodiretório.
pwd
é o comando que copia o diretório de trabalho p
atual (o conteúdo da variável), só faria sentido usar , ou melhor, no seu, se você quisesse adicionar diretórios condicionalmente ao local de onde foi iniciado. Mas mesmo assim, isso seria perigoso, como, por exemplo, se você iniciasse a partir do diretório de outra pessoa, alguém poderia ter plantado arquivos maliciosos lá que substituem comandos padrão como ou .w
d
$PWD
$(pwd)
$PWD
.zshrc
$PATH
zsh
zsh
/tmp
ls
rm
Responder2
não acho que seja possível fazer como você deseja, não com .rc (.rc é executado apenas uma vez, não será executado posteriormente, a menos que você o faça especificamente). Mas e quanto a dois apelidos?
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"
Com isso você pode adicionar seu diretório atual ao $PATH a qualquer momento.
Responder3
Como outros apontaram, seu código não funciona necessariamente como você espera quando você abre um novo terminal, pois o diretório de trabalho atual pode não ser aquele que contém seus projetos, e esse trecho de código éapenasexecutado quando um novo shell é iniciado.
Em vez disso, você provavelmente sabe onde estão seus projetos, possivelmente em relação ao seu $HOME
diretório. Nesse caso, você pode usar isso:
for binpath in vendor/bin node_modules/.bin; do
if [ -d "$HOME/projects/$binpath" ]; then
PATH=$HOME/projects/$binpath:$PATH
fi
done
export PATH
Aqui, presumo que $HOME/projects
é onde estão seus projetos.
O export
final provavelmente não é necessário, pois PATH
provavelmente já foi exportado.