Quando eu tento adicionar o Android SDK ao meu PATH, ele dá um erro de contexto

3

Estou recebendo uma mensagem estranha quando meu shell lê .profile :

/Users/alex/.profile:export:69: not valid in this context: SDK/tools:/Applications/Android

O erro é acionado por esta linha no meu .zprofile :

emulate sh -c "source .profile"

E, no entanto, todos os seguintes trabalhos:

bash .profile
zsh .profile
sh .profile
sh -c "source .profile"
source .profile

Todos retornam sem problemas - sem mensagens do console, código de saída 0. Aqui está a fonte no GitHub e aqui está o bloco de código relevante:

if [ $(uname -s) = "Darwin" ]; then
    # For distributed.net client
    PATH=$PATH:/Applications/dnetc518-macosx-x86
    # For MacPorts
    PATH=$PATH:/opt/local/bin:/opt/local/sbin
    # For Fink
    test -r /sw/bin/init.sh && . /sw/bin/init.sh
    # For Android
    PATH=$PATH:"/Applications/Android SDK/tools":"/Applications/Android SDK/platform-tools"
    # For Homebrew formulae on OS X
    export PATH=/usr/local/bin:/usr/local/sbin:$PATH

    ##
    # Your previous /Users/alex/.bash_profile file was backed up as /Users/alex/.bash_profile.macports-saved_2013-03-16_at_00:07:13
    ##

    # MacPorts Installer addition on 2013-03-16_at_00:07:13: adding an appropriate PATH variable for use with MacPorts.
    export PATH=/opt/local/bin:/opt/local/sbin:$PATH
    # Finished adapting your PATH environment variable for use with MacPorts.
fi
# this is line 69. it is blank in the original file.

Estou usando o zsh que vem com o OS X 10.9. Eu ainda não tive a chance de testar isso em uma caixa GNU / Linux, mas não acho que esse seja o problema.

% zsh --version
zsh 5.0.2 (x86_64-apple-darwin13.0)
    
por strugee 01.01.2014 / 03:04

1 resposta

2

Execute abaixo de set -x para ver onde está o problema. O relatório de números de linha do Zsh parece estar fora de emulate -c .

export PATH=/usr/local/bin:/usr/local/sbin:$PATH

Para conformidade com POSIX, você precisa de aspas duplas aqui, porque export é analisado como um comando comum. Sem as aspas, $PATH é dividido em palavras de acordo com o valor de IFS e cada palavra é interpretada como um padrão de caractere curinga, como sempre acontece em shells no estilo Bourne (sem incluir zsh). Bash e ksh tratam export especialmente e analisam o argumento como uma atribuição, e zsh não faz divisão variável a menos que seja explicitamente instruído, mas você não tem esse luxo no modo de emulação sh do zsh ou em traço.

Você pode usar qualquer um dos seguintes estilos:

export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
export "PATH=/usr/local/bin:/usr/local/sbin:$PATH"
export PATH=/usr/local/bin:/usr/local/sbin:"$PATH"

Ou você pode deixar o export . Exceto em shells antigos pré-POSIX Bourne, uma vez que uma variável esteja no ambiente, as atribuições alteram o valor no ambiente, você não precisa chamar export novamente. Em uma tarefa, você não precisa usar aspas (mas você pode, se preferir).

PATH=/usr/local/bin:/usr/local/sbin:$PATH

Veja Quando é necessário fazer uma cotação dupla? mais da boa impressão de quando você pode sair sem aspas.

    
por 01.01.2014 / 03:36