¿Cómo corregir el error "no es un identificador válido" después de configurar las variables de entorno?

12

Estoy tratando de configurar cocos2dx en Ubuntu 14.04 LTS pero después de configurar las variables ambientales (en .bashrc) empiezo a recibir este error:

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

Y no sé qué hacer para solucionarlo.

Carlos Campos
fuente
1
Tendrás que mostrar exactamente cómo estás configurando las variables.
Glenn Jackman

Respuestas:

16

pero después de establecer las variables ambientales

Parece que no lo hiciste correctamente.

Los errores que obtiene significan que las rutas (como /home/john/android) se están utilizando como nombres de variables, en lugar de como los valores asignados a ellas.

  • La sintaxis correcta para asignar una variable es NAME=value.
  • La sintaxis correcta para exportar una variable (con cualquier valor, si lo hay, ya se ha asignado) es export NAME.
  • La sintaxis correcta para asignar y exportar una variable (con el valor asignado) al mismo tiempo es export NAME=value.

Sospecho que está intentando hacer la tercera cosa pero está usando una sintaxis incorrecta. Cinco errores comunes que podrían producir errores como lo que estás viendo son:

  1. Usando espacios en lugar de =. export NAME valueEs incorrecto; valuese interpreta como el nombre de una variable posterior para exportar.

    (Esto sucede porque export NAME1 NAME2 es la sintaxis correcta para exportar múltiples variables).

  2. Poner espacios alrededor =. En muchos lenguajes de programación, es válido y estilísticamente preferido para rellenar operadores con espacios la mayor parte del tiempo. Pero para asignar un valor a una variable en un script de shell (u otra situación en la que está emitiendo comandos de shell), esto no está permitido. NAME = value(en un exportcomando o de otro modo) no funcionará; debes usar NAME=value.

    ( export NAME = valueintenta exportar variables nombradas NAME, =y value. Afortunadamente, esto nunca parece tener éxito silenciosamente porque intentar exportar una variable llamada =es un error de sintaxis. Por el contrario export NAME= value, parece funcionar, pero no se asigna valuea - en NAMEcambio, asigna el vacío, cadena de longitud cero NAMEy la exporta, y exporta la variable por separado value. Ambos son errores comunes).

  3. Separar partes del valor de la variable con espacios. Las variables de entorno pueden contener espacios, pero en la práctica rara vez se usan como separadores de campo en las variables de entorno. Cuando una sola variable contiene intencionalmente múltiples rutas, generalmente :se usa para separarlas.

  4. No citar espacios al asignar a variables. A veces se supone que el valor de una variable de entorno contiene un espacio. Por ejemplo, podría ser el nombre de un directorio que realmente contiene un espacio. En ese caso, es necesario citar cualquier espacio.

    Una forma de hacer esto es precederlos \. Consulte ¿Cómo puedo proteger los paréntesis pasados ​​a un comando de CD? y No es posible borrar archivo para obtener información sobre otras maneras - los métodos presentados en las respuestas se aplican, aunque ni pregunta es específicamente acerca de la asignación de variables de entorno.

    Por ejemplo, aquí hay algunas formas de exportar la variable de entorno SILLYPATHcon el 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"

    A menudo, cuando una carpeta que debe usar en un shell o asignar a una variable de entorno ampliamente utilizada contiene un espacio, puede ser beneficioso renombrarlo. (Pero a veces eso es poco práctico o indeseable).

  5. Asignación y / o exportación de una variable cuando no se tenía que hacer nada. Esto es una especie de meta-error; El problema técnico específico es a menudo uno de los anteriores, pero la solución es deshacerse de la línea ofensiva, o alguna parte de ella, en lugar de solucionarla. No elimines indiscriminadamente el código de .bashrc, por supuesto. Pero es exportposible que se haya agregado accidentalmente o inadvertidamente puede tener más código del que se pretendía. Por ejemplo, suponga que quiere escribir:

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

    Eso se agregaría .bashrc, y luego volver a obtenerlo. Pero supongamos que en su lugar escribiste:

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

    Entonces, su exportcomando no solo exportaría un valor aumentado de PATH, sino que también intentaría exportar variables con el nombre .y , que no es lo que desea. Dado que contienen caracteres que están prohibidos en los nombres de las variables, recibirá un error cada vez que inicie un nuevo shell bash interactivo./home/your-username/.bashrc

    Para evitar este problema, sugiero editar .bashrcen un editor (por ejemplo nano ~/.bashrc, gedit ~/.bashrc) en lugar de redirigir la salida al final con >>.

Sospecho que esto puede ser suficiente información para que pueda encontrar y corregir el error en su .bashrcarchivo. Si necesita más ayuda, por supuesto, debe publicar el contenido completo de ese archivo para su análisis. (Es solo por coincidencia que su problema es uno que se encuentra con suficiente frecuencia y con un mensaje de error lo suficientemente transparente como para hacer posible una respuesta general como esta).

Eliah Kagan
fuente
2
¡Gracias! Una respuesta tan detallada. En mi caso, poner espacio alrededor = fue el problema. Estuve luchando con esto por un tiempo.
Rengas
5

Asegúrate de estar ejecutando:

export ENV_VARIABLE

Más bien que:

export $ENV_VARIABLE

De lo contrario, está intentando exportar el valor de la variable en lugar de la variable en sí misma, por lo que obtendrá este error.

Lambda Pi Omega
fuente
1

Eliminar espacios y el signo de dólar. Por ejemplo, esto funciona de la misma manera que podría configurar un módulo de configuración de django en un servidor web a través de SSH, es decir:

export DJANGO_SETTINGS_MODULE=myapp.settings
Patrick Mutuku
fuente
0

He visto que esto ocurre con bastante frecuencia cuando copia algo con comas invertidas (de la web) y actualiza sus entornos o archivo bashrc.

Un buen lugar para comenzar sería escribir manualmente las comillas invertidas en el contenido pegado.

Gaurav Bhatnagar
fuente