Схоже, ви не зробили це правильно.
Я підозрюю, що ви намагаєтесь зробити третю справу, але використовуєте неправильний синтаксис. П'ять поширених помилок, які можуть призвести до помилок, таких як те, що ви бачите:
Використання пробілів замість =
. export NAME value
неправильно; value
потім інтерпретується як ім'я наступної змінної для експорту.
(Це відбувається тому export NAME1 NAME2
, що правильний синтаксис для експорту кількох змінних.)
Розміщення пробілів навколо =
. У багатьох мовах програмування більшу частину часу дійсно і стилістично віддано перевагу операторам з пробілами. Але призначати значення змінній у скрипті оболонки (або іншій ситуації, коли ви видаєте команди оболонки), це заборонено. NAME = value
(у export
команді чи іншим способом) не працюватиме; ви повинні використовувати NAME=value
.
( export NAME = value
Намагається експортувати змінні з ім'ям NAME
, =
і value
. До щастя , це ніколи не з'являється , щоб добитися успіху мовчки , тому що спроби експортувати змінну =
є синтаксичної помилкою. На відміну export NAME= value
з'явиться на роботу, але не призначає value
на NAME
--instead, він привласнює порожній, рядок нульової довжини до NAME
та експортує його та окремо експортує змінну value
. Обидва є загальними помилками.)
Розділення частин значення змінної пробілами. Змінні середовища можуть містити пробіли, але на практиці вони рідко використовуються як роздільники полів у змінних середовища. Коли одна змінна навмисно містить кілька шляхів, зазвичай :
їх використовують для їх розділення.
Не цитувати пробіли при призначенні змінних. Іноді значення змінної середовища повинно містити пробіл. Наприклад, це може бути назва каталогу, який дійсно містить пробіл. У такому випадку потрібно навести будь-які пробіли.
Один із способів зробити це - передувати їм \
. Див. Як я можу захистити дужки, передані команді 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"
Часто, коли папка, яку ви повинні використовувати в оболонці або призначити для широко використовуваної змінної середовища, містить пробіл, можливо, виграш від перейменування. (Але іноді це недоцільно або небажано.)
Призначення та / або експорт змінної, коли взагалі нічого не потрібно було робити. Це свого роду мета-помилка; конкретна технічна проблема часто є одним із перерахованих вище, але рішення полягає в тому, щоб позбутися від правопорушної лінії чи якоїсь її частини, а не виправити її. .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
) , а не перенаправляти висновок в кінці його з >>
.