Como corrigir o erro "não é um identificador válido" após definir variáveis ​​de ambiente?

12

Estou tentando configurar o cocos2dx no Ubuntu 14.04 LTS, mas depois de definir as variáveis ​​ambientais (in .bashrc), começo a receber este erro:

bash: export: dev/cocos2d-x-3.2/tools/cocos2d-console/bin': not a valid identifier 
bash: export:/home/john/android': not a valid identifier 
bash: export: dev/android-ndk-r10b': not a valid identifier 
bash: export:dev/adt-bundle-linux-x86_64-20140702/sdk': not a valid identifier

E eu não sei o que fazer para consertar isso.

Carlos Campos
fonte
1
Você terá que mostrar exatamente como está definindo as variáveis.
Glenn Jackman

Respostas:

16

mas depois de definir as variáveis ​​ambientais

Parece que você não fez isso corretamente.

Os erros que você está recebendo significam que os caminhos (como /home/john/android) estão sendo usados ​​como os nomes das variáveis, e não como os valores atribuídos a elas.

  • A sintaxe correta para atribuir uma variável é NAME=value.
  • A sintaxe correta para exportar uma variável (com qualquer valor, se houver, já foi atribuído) é export NAME.
  • A sintaxe correta para atribuir e exportar uma variável (com o valor atribuído) ao mesmo tempo é export NAME=value.

Eu suspeito que você está tentando fazer a terceira coisa, mas usando sintaxe errada. Cinco erros comuns que podem produzir erros como o que você está vendo são:

  1. Usando espaços em vez de =. export NAME valueestá incorreto; valueé então interpretado como o nome de uma variável subsequente a ser exportada.

    (Isso acontece porque export NAME1 NAME2 é a sintaxe correta para exportar várias variáveis.)

  2. Colocando espaços ao redor =. Em muitas linguagens de programação, é válido e estilisticamente preferido ocupar os operadores com espaços a maior parte do tempo. Mas, para atribuir um valor a uma variável em um script de shell (ou outra situação em que você esteja emitindo comandos de shell), isso não é permitido. NAME = value(em um exportcomando ou não) não funcionará; você deve usar NAME=value.

    ( export NAME = valueTenta variáveis de exportação chamado NAME, =e value. Felizmente isso nunca parece ter sucesso em silêncio, porque a tentativa de exportar uma variável chamada =é um erro de sintaxe. Em contraste export NAME= valueaparecerá ao trabalho, mas não atribui valuea NAME--instead, ele atribui o vazio, cadeia de comprimento zero para NAMEe exporta-a e exporta separadamente a variável value. Ambos são erros comuns.)

  3. Separando partes do valor da variável com espaços. As variáveis ​​de ambiente podem conter espaços, mas na prática raramente são usadas como separadores de campo em variáveis ​​de ambiente. Quando uma única variável contém intencionalmente vários caminhos, geralmente :é usada para separá-los.

  4. Não citando espaços ao atribuir a variáveis. Às vezes, o valor de uma variável de ambiente deve conter um espaço. Por exemplo, pode ser o nome de um diretório que realmente contém um espaço. Nesse caso, é necessário citar qualquer espaço.

    Uma maneira de fazer isso é precedê-los \. Consulte Como proteger parênteses passados ​​para um comando cd? e Não é possível excluir o arquivo para obter informações de outras maneiras - os métodos apresentados nas respostas se aplicam, mesmo que nenhuma pergunta seja especificamente sobre a atribuição a variáveis ​​de ambiente.

    Por exemplo, aqui estão algumas maneiras de exportar a variável de ambiente SILLYPATHcom o valor /home/ek/silly name/bin:

    export SILLYPATH=/home/ek/silly\ name/bin
    export SILLYPATH='/home/ek/silly name/bin'
    export SILLYPATH="/home/ek/silly name/bin"

    Freqüentemente, quando uma pasta que você deve usar em um shell ou atribuir a uma variável de ambiente amplamente usada contiver um espaço, poderá ser renomeada. (Mas às vezes isso é impraticável ou indesejável.)

  5. Atribuir e / ou exportar uma variável quando nada precisava ser feito. Isso é uma espécie de meta-erro; o problema técnico específico geralmente é um dos itens acima, mas a solução é livrar-se da linha ofensiva, ou de parte dela, em vez de corrigi-la. Não remova indiscriminadamente o código .bashrc, é claro. Mas um exportpode ter sido adicionado acidentalmente ou, inadvertidamente, pode ter mais código do que o pretendido. Por exemplo, suponha que você quis escrever:

    echo 'export PATH=~/some.bin:"$PATH"' >>~/.bashrc; . ~/.bashrc

    Isso seria anexado e .bashrc, em seguida, re-originado. Mas suponha que você tenha escrito:

    echo 'export PATH=~/some.bin:"$PATH" . ~/.bashrc' >>~/.bashrc  # WRONG!

    Então, seu exportcomando não apenas exportaria um valor aumentado de PATH, mas também tentaria exportar variáveis ​​nomeadas .e , que não é o que você deseja. Como eles contêm caracteres proibidos em nomes de variáveis, você receberá um erro sempre que iniciar um novo shell bash interativo./home/your-username/.bashrc

    Para evitar este problema, sugiro edição .bashrcem um editor (por exemplo, nano ~/.bashrc, gedit ~/.bashrc), em vez de redireccionar a saída para o fim de tudo com >>.

Suspeito que essas informações sejam suficientes para que você encontre e corrija o erro em seu .bashrcarquivo. Se precisar de mais ajuda, é claro que você deve postar todo o conteúdo desse arquivo para análise. (É apenas por coincidência que o seu problema foi encontrado com freqüência suficiente e com uma mensagem de erro suficientemente transparente para possibilitar uma resposta geral como essa.)

Eliah Kagan
fonte
2
Obrigado! Uma resposta tão detalhada. No meu caso, colocar espaço em torno de = foi o problema. Eu estava lutando com isso por um tempo.
Rengas 9/04/16
5

Verifique se você está executando:

export ENV_VARIABLE

Ao invés de:

export $ENV_VARIABLE

Caso contrário, você está tentando exportar o valor da variável em vez da própria variável, para obter esse erro.

Lambda Pi Omega
fonte
1

Elimine os espaços e o cifrão. Por exemplo, isso funciona da mesma maneira que você pode definir um módulo de configurações de django em um servidor Web via SSH, ou seja:

export DJANGO_SETTINGS_MODULE=myapp.settings
Patrick Mutuku
fonte
0

Vi esse ocorrendo com bastante frequência quando você copia algo com vírgulas invertidas (da Web) e atualiza seus ambientes ou arquivo bashrc.

Um bom lugar para começar seria digitar manualmente as vírgulas invertidas no conteúdo colado.

Gaurav Bhatnagar
fonte