Когда я задаю путь экспорта с помощью терминала, в какой файл он сохраняется? [дубликат]

На этот вопрос уже есть ответ:

Например, когда я запускаю экспорт экспорт PATH = $ PATH: $ GOROOT / bin: $ GOPATH / bin или GOPATH = ~ / workspace / me / go в какой файл это добавляется?

2
задан 14 April 2018 в 09:00

2 ответа

Когда Вы export переменная, это не добавляется ни к какому файлу нигде.

Эффект export, в противоположность простому присвоению переменной, переменная передачи переменной в среду всех дочерних процессов оболочки. Это не делает ничего больше; это не изменяет ни одного из конфигурационных файлов оболочки. После того, как оболочка и все ее дочерние процессы вышли, экспортируемой переменной не стало! При открытии новой оболочки, которая не является ребенком первой оболочки, та оболочка не будет помнить переменную.

На самом деле нет никакой потребности к export СОЕДИНИТЕ КАНАЛОМ, потому что ПУТЬ уже является переменной среды. Это уже экспортировано; это автоматически будет переданным в среду дочерних процессов, и когда Вы измените его, дочерние процессы наследуют изменение также.

Вы видите это использование printenv, команда для печати переменных среды:

$ foo=bar; echo $foo             # set a variable   
bar                              # the shell knows it
$ printenv foo                   # but it's not in the environment...
$ export foo; printenv foo       # export the variable and check again
bar                              # there it is!
$ foo=new; printenv foo          # change the variable
new                              # the change is inherited
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ PATH=/usr/bin; printenv PATH   # printenv is in /usr/bin so keep that!
/usr/bin                         # the change was inherited

(Теперь я должен выйти из той оболочки для возвращения моего ПУТИ, или source /etc/environment, потому что любая новая оболочка, которую я запускаю с этой оболочки, наследует ту переменную ПУТИ, которую я испортил...),

Если Вы хотите установить какую-либо переменную постоянно, необходимо добавить его к одному из конфигурационных файлов оболочки сами.

ПУТЬ является единственной переменной, насколько я знаю, это значением по умолчанию, начинаются /etc/environment на Ubuntu. Я рекомендую не редактировать /etc/environment устанавливать ПУТЬ, или если Вы делаете, стараться сделать резервное копирование исходного файла, потому что у Вас не будет никакого другого способа восстановить первоначальный тракт (если Вы не записали его где-нибудь или имеете потрясающую память). Также знайте, что никакие расширения не будут выполнены на содержании, таким образом, необходимо будет использовать полные пути, нет $PATH или $GOPATH или ~. Если Вы запишете такие вещи, то они будут буквально в ПУТИ, и если Ваш ПУТЬ буквально $PATH:~/workspace/me/go, Вы не сможете выполнить любые команды (кроме встроенных в оболочку), не используя их полные пути.

Я также не рекомендую установку PATH в .bashrc, потому что каждая интерактивная оболочка Bash читает .bashrc, и довольно распространено запустить новую оболочку с оболочки и так далее... Если Вы помещаете что-то как

PATH="$PATH:$HOME/foo"

в Вашем .bashrc, Вы затем найдете это /home/user/foo добавляется к Вашему ПУТИ многократно; каждый раз, когда оболочка запускает оболочку, ПУТЬ расширяется снова. Это могло в конечном счете заставить вещи замедлиться, особенно если бы Вы добавили много путей. Кроме того, только интерактивное чтение оболочек Bash ~/.bashrc, таким образом, если Вы будете использовать оболочку кроме Bash или запускать скрипт без него являющийся дочерним процессом интерактивной оболочки Bash, то он не будет иметь этой переменной.

Вместо этого я рекомендую добавить строку к ~/.profile расширять Ваш ПУТЬ. Этот файл только читается оболочками входа в систему; обычно, это только читается однажды, когда Вы входите в систему своей сессии, таким образом, ПУТЬ будет только добавлен к однажды, и все оболочки наследуют набор переменных среды там, не только интерактивные оболочки Bash. Обычно добавить переменные среды к этому файлу. Так, можно открыться ~/.profile в текстовом редакторе, и добавляют строки, говоря что-то как:

GOPATH="$HOME/workspace/me/go"
PATH="$PATH:$GOPATH/bin"

Это - хорошая идея заключить путь в кавычки как показано, в случае, если любой из каталогов включает специальные символы (это - также хорошая идея создать каталоги, которые не имеют специальных символов на их имена, но, вещи происходят), и если Вы заключаете его в кавычки, Вы не можете использовать ~ как ярлык для /home/user потому что двойные кавычки (") подавите расширение тильды, но можно использовать $HOME вместо этого, потому что расширение параметра все еще выполняется и $HOME станет /home/user.

После редактирования сохраните файл и выход, выйдите из системы и въезжайте задним ходом или работайте source ~/.profile, и Ваш ПУТЬ будет всегда включать /home/user/workspace/me/go.

2
ответ дан 2 December 2019 в 03:33

Настройки Shell обычно редактируются в $HOME/.bashrc, который является sourced каждой оболочкой Вы запускаете. Читать man bash.

BTW, Вы должны иметь GOPATH определение

 GOPATH=~/workspace/me/go  

Перед использованием GOPATH

export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Кроме того, где имеет определение GOROOT?

0
ответ дан 2 December 2019 в 03:33

Другие вопросы по тегам:

Похожие вопросы: