OS X 10.6: Como eu altero temporariamente o $ PATH para o ZSH?

2

Eu gostaria de criar um script que defina o $ PATH para um conjunto de diretórios escolhidos por mim (ignorando assim os caminhos predefinidos, como / usr / bin, / usr / local / bin e assim por diante ... ) seguido pelo lançamento do ZSH.

Isso faz o truque para o BASH:

#!/bin/sh
PATH="/Users/Thoht/Sites/djangostack/apps/django/bin"
# exec /bin/bash --noprofile --norc

Eu recebo uma nova sessão BASH com o caminho sendo apenas o que é definido acima que eu cancelo com Ctrl-D quando terminado. Eu gostaria de recriar este script para ZSH, mas não tive sucesso. Eu tentei isso:

#!/bin/sh
PATH="/Users/Thoht/Sites/djangostack/apps/django/bin"
# exec /bin/zsh -f

No entanto, os caminhos predefinidos como / usr / bin e todo esse jazz permanecem, o que torna o script inútil.

De preferência eu gostaria de ter meu .zshrc carregado e apenas o caminho mudou temporariamente.

EDIT Esqueci de adicionar uma coisa - / etc / zshenv que é lido em primeiro lugar (ou assim acredito) contém este script:

# system-wide environment settings for zsh(1)
if [ -x /usr/libexec/path_helper ]; then
    eval '/usr/libexec/path_helper -s'
fi

EDIT 2 A primeira edição é irrelevante, pois não quero usar a opção -f. Uma pergunta mais precisa é:

"Como eu adiciono caminhos para preceder os caminhos .zshrc para $ PATH em um script de shell seguido pelo lançamento do ZSH normalmente (como acontece com a leitura de .zshrc)?"

    
por totte 14.06.2011 / 14:22

2 respostas

0

Infelizmente, o zsh sempre lê o arquivo global zshenv , não importa o quanto você diga que não (mesmo quando você chama zsh -f +d ).

Você pode fazer uma cópia do executável zsh, substituindo a string /etc/zshenv por /NO!/zshenv .

Em vez de dizer ao zsh para não carregar os arquivos de configuração do usuário, você pode especificar o seu próprio e desfazer o dano feito por /etc/zshenv in $ZDOTDIR/.zshenv .

export ZDOTDIR="$(mktemp -d)"
cat <<'EOF' >"$ZDOTDIR/.zshenv"
PATH="/Users/Thoht/Sites/djangostack/apps/django/bin"
EOF
zsh
rm "$ZDOTDIR/.zshenv"
rmdir "$ZDOTDIR"
    
por 14.06.2011 / 16:43
0

Whoah, eu resolvi isso. Eu tenho pouca ou nenhuma experiência em scripts de shell e ZSH, daí a pergunta confusa. Permita-me reformulá-lo:

"Como devo escrever um script que adicione vários diretórios à frente de $ PATH e depois execute o ZSH?"

A solução:

#!/bin/sh
export SOMETHING_PATH="/junk/and/stuff:"
exec /bin/zsh

O .zshrc

...
export PATH="$SOMETHING_PATH/bin:/usr/local/bin:/the/rest/of/your/paths"
...
    
por 14.06.2011 / 22:55