Як виправити помилку "недійсний ідентифікатор" після встановлення змінних середовища?


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
Вам доведеться точно показати, як ви встановлюєте змінні.
glenn jackman

Відповіді:


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
Дякую! Така детальна відповідь. У моєму випадку проблема з пробілом була = . Я деякий час боровся з цим.
Ренгас

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.