Как исправить ошибку «неверный идентификатор» после установки переменных среды?


12

Я пытаюсь настроить cocos2dx в Ubuntu 14.04 LTS, но после установки переменных среды (in .bashrc) я получаю эту ошибку:

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

И я не знаю, что делать, чтобы это исправить.


1
Вам нужно будет показать, как именно вы устанавливаете переменные.
Гленн Джекман

Ответы:


17

но после установки переменных среды

Похоже, вы сделали это неправильно.

Ошибки вы получаете среднее , что путь (как /home/john/android) используются в качестве имен переменных, а не в качестве значений , присвоенных им.

  • Правильный синтаксис для назначения переменной NAME=value.
  • Правильный синтаксис для экспорта переменной (с любым значением, если оно есть, оно уже было назначено) export NAME.
  • Правильный синтаксис для назначения и экспорта переменной (с присвоенным значением) одновременно export NAME=value.

Я подозреваю, что вы пытаетесь сделать что-то третье, но используете неправильный синтаксис. Пять распространенных ошибок, которые могут привести к таким ошибкам, как то, что вы видите:

  1. Использование пробелов вместо =. export NAME valueэто неверно; valueзатем интерпретируется как имя последующей переменной для экспорта.

    (Это происходит потому , что export NAME1 NAME2 это правильный синтаксис для экспорта нескольких переменных.)

  2. Расставлять места вокруг =. Во многих языках программирования допустимо и стилистически предпочитать заполнять операторы пробелами в большинстве случаев. Но назначать значение переменной в сценарии оболочки (или в другой ситуации, когда вы вводите команды оболочки), это не разрешено. NAME = valueexportкоманде или иным образом) не будет работать; Вы должны использовать NAME=value.

    ( export NAME = valueПытается экспортировать переменные с именем NAME, =и value. К счастью , это никогда не появляется , чтобы добиться успеха молча , потому что попытки экспортировать переменную =является синтаксической ошибкой. В отличие export NAME= valueпоявится на работу, но не назначает valueна NAME--instead, он присваивает пустой, Строка нулевой длины в NAMEи экспортирует ее, а также отдельно экспортирует переменную value. Обе распространенные ошибки.)

  3. Разделение частей значения переменной пробелами. Переменные среды могут содержать пробелы, но на практике они редко используются в качестве разделителей полей в переменных среды. Когда одна переменная намеренно содержит несколько путей, обычно :используется для их разделения.

  4. Не заключать в кавычки при назначении переменных. Иногда значение переменной среды должно содержать пробел. Например, это может быть имя каталога, который действительно содержит пробел. В этом случае необходимо указать любые пробелы.

    Один из способов сделать это состоит в том, чтобы предшествовать им \. См. Как защитить скобки, передаваемые команде cd? и Невозможно удалить файл для получения информации о других способах - применяются методы, представленные в ответах, даже если ни один из вопросов не касается конкретно назначения переменных среды.

    Например, вот несколько способов экспортировать переменную среды SILLYPATHсо значением /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"

    Часто, когда папка, которую необходимо использовать в оболочке или назначить широко используемой переменной среды, содержит пробел, может быть полезно переименование. (Но иногда это нецелесообразно или нежелательно.)

  5. Назначение и / или экспорт переменной, когда ничего не нужно было делать вообще. Это своего рода мета-ошибка; конкретная техническая проблема часто является одной из вышеперечисленных, но решение состоит в том, чтобы избавиться от неисправной линии или какой-либо ее части, а не исправить ее. Не удаляйте без разбора код .bashrc, конечно. Но он exportможет быть случайно добавлен или может случайно содержать больше кода, чем предполагалось. Например, предположим, что вы хотели написать:

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

    Что бы добавить .bashrc, а затем повторно получить его. Но предположим, что вы вместо этого написали:

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

    Тогда ваша exportкоманда не только экспортирует увеличенное значение PATH, но и попытается экспортировать переменные с именами .и , а это не то, что вам нужно. Так как они содержат символы, которые запрещены в именах переменных, вы получите сообщение об ошибке при каждом запуске новой интерактивной оболочки bash./home/your-username/.bashrc

    Чтобы избежать этой проблемы, я предлагаю редактирование .bashrcв редакторе (например, nano ~/.bashrc, gedit ~/.bashrc) , а не перенаправлять вывод в конце его с >>.

Я подозреваю, что это может быть достаточно информации для вас, чтобы найти и исправить ошибку в вашем .bashrcфайле. Если вам нужна дополнительная помощь, вы, конечно, должны опубликовать все содержимое этого файла для анализа. (Только по стечению обстоятельств ваша проблема оказалась достаточно часто встречающейся и с достаточно прозрачным сообщением об ошибке, чтобы сделать возможным общий ответ, подобный этому.)


2
Спасибо! Такой подробный ответ. В моем случае проблема заключалась в том, чтобы поставить место вокруг = . Я боролся с этим некоторое время.
Rengas,

5

Убедитесь, что вы работаете:

export ENV_VARIABLE

Скорее, чем:

export $ENV_VARIABLE

В противном случае вы пытаетесь экспортировать значение переменной, а не саму переменную, поэтому вы получите эту ошибку.


1

Устранить пробелы и знак доллара. Например, это работает точно так же, как вы можете установить модуль настроек django на веб-сервере через SSH, то есть:

export DJANGO_SETTINGS_MODULE=myapp.settings

0

Я видел, как это происходит довольно часто, когда вы копируете что-то с кавычками (из Интернета) и обновляете свою среду или файл bashrc.

Хорошее место для начала было бы просто вручную ввести кавычки в вставленном контенте.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.