Похоже, вы сделали это неправильно.
Я подозреваю, что вы пытаетесь сделать что-то третье, но используете неправильный синтаксис. Пять распространенных ошибок, которые могут привести к таким ошибкам, как то, что вы видите:
Использование пробелов вместо =
. 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
) , а не перенаправлять вывод в конце его с >>
.