Linux export path не сохраняется

Обновлено: 03.07.2024

До недавнего времени я использовал Java 1.7 для своей кодовой базы, а недавно мы обновились до java 8. Когда я пытаюсь установить переменную JAVA_HOME в файле .bash_profile / .bashrc как :

и сохраните его и используйте источник .bash_profile, на который указывает java-версия :

но когда я выхожу из terminal/, закрываю сеанс и перепроверяю java-версию, она снова указывает на старую версию, как это :

Не могли бы вы помочь мне установить путь JAVA_HOME постоянно, чтобы мне не нужно было запускать исходный код .bash_profile каждый раз, когда я вхожу в свой terminal, чтобы постоянно менять версию java с 1.7 на 1.8.

Кроме того, может ли кто-нибудь помочь мне понять :

  1. Разница между .bash_profile и .bashrc файлами.
  2. Когда я проверяю версию среды выполнения Java в своих системных настройках, она указывает на 1.8

Нажмите ЗДЕСЬ Для справки , но когда я проверяю java-версию в terminal, она отображается как :

  1. В чем разница между командой $JAVA_HOME и командой whereis java ?

2 ответа

У меня есть очень простой вопрос: почему нам нужно добавить точку с запятой в конце переменной PATH и почему мы не добавляем точку с запятой в переменную JAVA_HOME? Я читаю много книг и форумов: Чтобы разделить разные пути в переменной PATH? или сказать системе или JRE, чтобы она не смотрела.

JAVA_HOME не сохраняется set/ в переменной path после закрытия экземпляра terminal

Это верно. В обычном shell изменения, внесенные в переменные среды в shell, теряются при выходе shell. (Это относится к Linux, UNIX, Mac OS и даже Windows "cmd.exe".)

Не могли бы вы помочь мне установить путь JAVA_HOME постоянно, чтобы мне не нужно было запускать исходный код .bash_profile каждый раз, когда я вхожу в свой terminal, чтобы постоянно менять версию java с 1.7 на 1.8.

На UNIX / Linux одной из возможностей было бы поместить глобальные настройки в /etc/profile . Однако я не знаю, подходит ли это для MacOS. В вашем случае это может быть то, что вы вводите настройки в неправильный файл или что вы вводите неправильные настройки в правильный файл.

Но это то, что "man bash" говорит об инициализации shell (в моей системе Linux):

Когда bash вызывается как интерактивный логин shell или как неинтерактивный shell с параметром --login , он сначала считывает и выполняет команды из файла /etc/profile , если этот файл существует. После чтения этого файла он ищет

/.profile в этом порядке , а также читает и выполняет команды из первого , который существует и доступен для чтения. .

Когда запускается интерактивный shell, который не является логином shell , bash считывает и выполняет команды из

/.bashrc , если этот файл существует. Это может быть предотвращено с помощью параметра --norc . Параметр --rcfile file заставит bash читать и выполнять команды из файла вместо

Также не мог бы кто-нибудь помочь мне понять: 1) Разницу между .bash_profile и .bashrc файлами.

2) Когда я проверяю версию среды выполнения Java в своих системных настройках, она указывает на 1.8, но когда я выполняю

Я получаю этот вывод:

Я предполагаю, что ваш файл(ы) инициализации shell переопределяет то, что вы установили в системных настройках. Кроме того, я подозреваю, что вы, возможно, неправильно поняли, как shell находит команды. Как объясняет "man bash", shell фактически будет искать команды, используя переменную $PATH . Это переменная, которую вы должны проверить, чтобы выяснить, почему java -version и whereis java ведут себя не так, как вы ожидаете.

Вы можете проверить, каковы фактические параметры переменной среды в shell, введя

3) В чем разница между командами $JAVA_HOME и whereis java ?

Первый-это переменная окружения . которая не является путем поиска команды. Он обычно используется сторонними инструментами для поиска JDK / JRE. Но сами инструменты JDK / JRE игнорируют это!

Вторая - это встроенная команда, которая пытается найти команду на реальном пути поиска команды shell.

В идее IntelliJ, используя окно Gradle, я могу выполнять любые и все задачи Gradle. Однако, когда я пытаюсь выполнить те же задачи через окно terminal в пределах IDE, он поражает меня следующей ошибкой: ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the.

JAVA_HOME не сохраняется set/ в переменной path после закрытия экземпляра terminal

Это неверно. Он сохраняется в переменной PATH, как только вы его сохраните. Однако это не влияет на текущие открытые terminal windows, только на новые. Закрытие окна terminal не имеет к этому никакого отношения.

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

Я новичок в ubuntu . Я пытаюсь использовать java-8. Где я уже установил java-6 в свою машину ubuntu . Я просто хочу использовать java-8 из моего terminal (для тестовой цели), а не со всей моей.

Я установил JAVA_HOME, как показано ниже, из batch file, но он все еще указывает на то, что установлено в C диске @echo on set JAVA_HOME=D:\xxxx\JAVA\jdk1.7.0_80 set.

я настроил задание crontab для запуска скрипта php, php

/Documents/workspace/tools/src/main/php/testcron.php > mylog и файл журнала показывают: JAVA_HOME не установлен. я попробовал экспорт и.

У меня есть очень простой вопрос: почему нам нужно добавить точку с запятой в конце переменной PATH и почему мы не добавляем точку с запятой в переменную JAVA_HOME? Я читаю много книг и форумов.

В идее IntelliJ, используя окно Gradle, я могу выполнять любые и все задачи Gradle. Однако, когда я пытаюсь выполнить те же задачи через окно terminal в пределах IDE, он поражает меня следующей.

Я пытаюсь добавить переменные окружения %JAVA_HOME%\bin в Path с помощью скрипта Powershell. Сама переменная JAVA_HOME указывает на C:\Program Files\Java\jdk1.8.0_172 . Когда я добавил.

Если JAVA_HOME не задано, то команда echo будет отображать командные инструкции в том виде, в каком они есть: C:\>echo %JAVA_HOME% %JAVA_HOME% Чтобы установить переменные среды пользователя.

Я установил узел 10.13 и использую mac 10.14.6. Однако после закрытия terminal версия узла изменяется на 10.0. Я был бы признателен, если бы вы сказали мне, как вставить версию узла. $sudo n 10.13.

Как решал:
установил jdk1.5.0_11.
Методом тыка понял что установилось в /usr/java/jdk1.5.0_11.

Далее в Path прописываю путь к java:

По умолчанию PATH:
echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

Изменяю PATH:
PATH=usr/java/jdk1.5.0_11/bin:/$PATH

echo $PATH
/usr/java/jdk1.5.0_11/bin://usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin


Далее если запускать приложения из-под коммандной строки, например, то всё работает

Думаю, всё ОК, чтоб не вводить каждый раз, делаю
export PATH.

Перезагружаю комп export PATH как буд-то и небыло:
echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

Т.е export Path не сработал.

Вопрос: где хранится PATH (в каком файле)?

Из-за чего может быть такая трабла?

Мы должны построить мирное и свободное общество, где уважают права и свободы, где нет угнетённых, обиженных и несправедливо обделённых, где нет места ненависти и крови. построить его любой ценой. почитай man bash на досуге.
там прекрасно расписано, почему то, что ты делаешь не работает, да и не должно работать. и как сделать так, чтоб работало там тоже написано.

/.bashrc
bash: /root/.profile: Нет такого файла или каталога
bash: /root/.bashrc: Отказано в доступе

Может у меня не сохраняется, т.к. "Отказано в доступе"?

почитай man bash на досуге.
там прекрасно расписано, почему то, что ты делаешь не работает, да и не должно работать. и как сделать так, чтоб работало там тоже написано.

Попробовал. Нажал enter, а текст листается и листается. Положил бутылку кока-колы на клавишу enter, попил чай, пришёл, текст всё листается. Правда, через 10 сек. подошёл к концу. Итого, это минут на 7 непрерывного листания и страниц на 150 убористого английского текста.

Извините, наболело просто. Не подумайте, что кого-то к чему-то принуждаю, просто моё мнение.

Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС Linux спроектирована так, что исполняемые и связанные с ними файлы программ распределяются по различным специализированным каталогам. Например, библиотеки устанавливаются в /lib или /usr/lib, конфигурационные файлы в /etc, а исполняемые файлы в /sbin/, /usr/bin или /bin.

Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная PATH. Эта переменная позволяет существенно сократить длину набираемых команд в терминале или в скрипте, освобождая от необходимости каждый раз указывать полные пути к требуемым файлам. В этой статье мы разберёмся зачем нужна переменная PATH Linux, а также как добавить к её значению имена своих пользовательских каталогов.

Переменная PATH в Linux

Для того, чтобы посмотреть содержимое переменной PATH в Linux, выполните в терминале команду:


На экране появится перечень папок, разделённых двоеточием. Алгоритм поиска пути к требуемой программе при её запуске довольно прост. Сначала ОС ищет исполняемый файл с заданным именем в текущей папке. Если находит, запускает на выполнение, если нет, проверяет каталоги, перечисленные в переменной PATH, в установленном там порядке. Таким образом, добавив свои папки к содержимому этой переменной, вы добавляете новые места размещения исполняемых и связанных с ними файлов.

Для того, чтобы добавить новый путь к переменной PATH, можно воспользоваться командой export. Например, давайте добавим к значению переменной PATH папку/opt/local/bin. Для того, чтобы не перезаписать имеющееся значение переменной PATH новым, нужно именно добавить (дописать) это новое значение к уже имеющемуся, не забыв о разделителе-двоеточии:

Теперь мы можем убедиться, что в переменной PATH содержится также и имя этой, добавленной нами, папки:

Вы уже знаете как в Linux добавить имя требуемой папки в переменную PATH, но есть одна проблема — после перезагрузки компьютера или открытия нового сеанса терминала все изменения пропадут, ваша переменная PATH будет иметь то же значение, что и раньше. Для того, чтобы этого не произошло, нужно закрепить новое текущее значение переменной PATH в конфигурационном системном файле.

В ОС Ubuntu значение переменной PATH содержится в файле /etc/environment, в некоторых других дистрибутивах её также можно найти и в файле /etc/profile. Вы можете открыть файл /etc/environment и вручную дописать туда нужное значение:

sudo vi /etc/environment


Можно поступить и иначе. Содержимое файла .bashrc выполняется при каждом запуске оболочки Bash. Если добавить в конец файла команду export, то для каждой загружаемой оболочки будет автоматически выполняться добавление имени требуемой папки в переменную PATH, но только для текущего пользователя:


Выводы

В этой статье мы рассмотрели вопрос о том, зачем нужна переменная окружения PATH в Linux и как добавлять к её значению новые пути поиска исполняемых и связанных с ними файлов. Как видите, всё делается достаточно просто. Таким образом вы можете добавить столько папок для поиска и хранения исполняемых файлов, сколько вам требуется.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Я пытаюсь добавить каталог на свой путь, поэтому он всегда будет на моем пути Linux. Я пробовал:

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

Как я могу сделать это, чтобы это было установлено постоянно?

24 ответа

Вам нужно добавить его в файл

В зависимости от того, что вы делаете, вы также можете использовать символические ссылки на двоичные файлы:

Обратите внимание, что это не будет автоматически обновлять ваш путь до конца сеанса. Для этого вам необходимо запустить:

Пара вопросов. 1) Не должно быть двоеточия между $PATH и /usr/bin . 2) Должен ли /usr/bin быть там. 3) Разве вы не должны использовать /usr/local/bin ? Пожалуйста, обратите внимание : часто считается дырой в безопасности, чтобы оставлять в конце пути bash конечную двоеточие, потому что это делает так, чтобы bash просматривал текущий каталог, если не может найти исполняемый файл, который ищет. Пользователи, которые находят этот пост в поисках дополнительной информации, должны быть проинформированы об этом. @AdamRobertson Это небезопасно - рассмотрите сценарий, когда вы распаковываете tarball, затем cd в каталог, в который вы распаковали его, затем запустите ls --- и затем поймете, что в tarball есть вредоносная программа с именем ls . Для меня это был .bash_profile, а не .profile. Кажется, это отличается для всех. @Istvan Chung В этом случае системный ls будет иметь преимущество, но я понимаю, что вы говорите . @AdamRobertson Есть и другие, более противные версии. Например, создание вредоносного скрипта с именем sl и ожидание, когда кто-нибудь введет ошибку ls . К вашему сведению: в Ubuntu и Debian уже есть Я думаю, что я значительно улучшил качество этого ответа и решил несколько вопросов, которые подняли другие пользователи. Каждый экспорт пути или каждая команда, которая корректирует путь, всегда должны разделять существующий путь двоеточием. Никогда не следует использовать начальные или конечные двоеточия, а текущий каталог никогда не должен находиться в пути. просто для ясности. настройка пути, показанная здесь, в порядке и не представляет опасности, включая текущий каталог . мне потребовалось некоторое время, чтобы выяснить из других комментариев здесь, но вы можете увидеть из истории редактирования, как выглядит плохая версия Разве в нем не должно быть кавычек, таких как export PATH="$PATH:/path/to/dir" , если в любом из имен каталогов есть пробелы? Я согласен, что это немного маловероятно в случае с PATH . Но в любом случае, это хорошая привычка, так или иначе, " обойти" все расширения. @AaronMcDaid Если в ваших каталогах есть пробелы, вам, вероятно, следует их избегать. На самом деле это вопрос предпочтений. Извините за некромантию, но у Арча это не сработало. Вместо этого я добавил строку в .bashrc . @ Алекс, который будет работать на Рел, я точно знаю. Возможно, вы также можете изменить сценарии в файле / etc / bashrc в зависимости от доступа для разных пользователей. Пока скрипт, который устанавливает путь var при каждом открытии оболочки, вы получите правильный путь var. Поскольку безопасность продолжается до тех пор, пока вы гарантируете, что никакие команды не могут быть запущены в вашем каталоге экспорта, непреднамеренно экспорт будет безопасным. В моей системе Debian 8 мне просто нужно было указать путь в файле

/.profile а затем запустить source .profile файл source .profile , чтобы изменения вступили в силу немедленно для текущего сеанса терминала. Это установлено постоянно и доступно после выхода из системы / перезагрузки.

/.profile запустите source

/.profile который вам не нужно перезагружать.

Это временное решение, потому что все изменения будут потеряны при загрузке системы. Правильным решением является редактирование переменной PATH в файле / etc / environment. @aog неверно, выполняется в начале сеанса оболочки и поэтому сохраняется при входе в систему. @alhelal вам, вероятно, придется перезапустить сеанс терминала или использовать source

/.bashrc для получения новых изменений. pdflatex также должен иметь исполняемый флаг.

Спасибо. На самом деле мой .bashrc содержит некоторую синтаксическую ошибку, которая вызвала проблему. В более новых выпусках Ubuntu (16.04 / 18.04) я использую .profile для расширения переменной $ PATH, потому что записи будут дублироваться в новых оболочках bash при добавлении в .bashrc. Расширение самого популярного комментария @ erewok (как мне и было нужно). Конечный двоеточие (т. Е. Двоеточие как последний символ) обрабатывается как имя папки с нулевой длиной, аналогичное имени пары из двух последовательных двоеточий. И соглашение состоит в том, чтобы рассматривать все имена папок с нулевой длиной как эквивалентные текущему каталогу . на центе os7, кажется, вместо .profile меня есть .bash_profile

В Ubuntu отредактируйте /etc/environment . Его единственная цель - хранить переменные среды. Первоначально здесь определяется переменная $ PATH. Это вставка из файла /etc/environment :

Таким образом, вы можете просто открыть этот файл с правами root и добавить все, что захотите.

Для немедленных результатов запустите (попробуйте как обычный пользователь и root):

ОБНОВИТЬ:

Если вы используете zsh (aka Z Shell), добавьте эту строку сразу после комментариев в /etc/zsh/zshenv :

Я столкнулся с этой маленькой причудой на Ubuntu 15.10, но если ваш zsh не получит правильную PATH, это может быть почему

@ user3439968 Хотя вы, возможно, и правы, я никогда не сталкивался с этим без него: D Опять же, я только возился с ОС, которые мне удобно использовать. У меня в Ubuntu и Debian это есть. Мои FreeBSD и OpenWRT этого не делают. Я использую / etc / profile @ user3439968, Спасибо, что указали на это. Верно подмечено FWIW $PATH также определен в /etc/profile в Arch Linux. Как ни странно, в моем Ubuntu 14.04 этот файл также отсутствует, так как он использует

/.bashrc . С другой стороны, отсутствие /etc/environment имеет смысл с моей точки зрения, поскольку у меня нет ни одной переменной, которую нужно установить для «всех» … и, как правило, лучше отделить конфигурации базовой системы от отдельных пользовательские конфигурации в любом случае. ;)

@ e-sushi Я шокирован этим. Я сам на Ubuntu 14.04.1. и я могу обещать, что файл был встроен. Попробовав каждое предложение под солнцем, но / etc / environment, и убедившись, что все они НЕ работают, я наконец наткнулся на это. Я также на Ubuntu 14.04, и это единственный, который фактически изменил переменную PATH после перезагрузки. потребовался перезапуск, чтобы система поняла, что я добавил эту строку! не был сразу признан /etc/environment предназначен для общесистемных переменных окружения. Это единственная причина, чтобы изменить это. Если вы сделаете ошибку во время редактирования этого файла, вы, вероятно, в итоге получите пустую переменную PATH (я бы ни за что этого не пожелал). Хороший способ добавить пути к вашей переменной PATH , которые влияют на систему в целом использовать /etc/profile.d каталог (ссылка должна быть полезной ссылка ). @ BlackBrain, да, я знаю об опасностях, которые связаны с изменением /etc/environment . но если вы используете что-то вроде gedit, по умолчанию у вас должен быть файл резервной копии. не говоря уже о том, что вы всегда можете переопределить переменную PATH пустой переменной в ЛЮБОМ системном файле. моя точка зрения такова: если вы хотите изменить PATH, вы должны быть уже знакомы с опасностями, связанными с этим, и изменение /etc/environment не более опасно, чем сказать что-то вроде /etc/profile :) Пользователь должен перезагрузить компьютер после обновления файла среды.

/ .bashrc, вы можете легко загрузить (например, если вы изменили переменную $ PATH, но не хотите перезапускать) таким же образом, используя source

Debian имеет /etc/environment но установка PATH там не имеет никакого эффекта - / etc / profile и /etc/login.defs сбрасывают их обратно. Протестировано на Debian 9.5

Существует несколько способов сделать это. Фактическое решение зависит от цели.

Значения переменных обычно хранятся либо в списке назначений, либо в оболочке script, которая запускается в начале сеанса системы или пользователя. В случае оболочки script вы должны использовать специальный синтаксис оболочки.

Системная ширина

  • /etc/environment Список уникальных заданий. Идеально подходит для добавления общесистемных каталогов, таких как переменная /usr/local/something/bin to PATH или определение JAVA_HOME .
  • /etc/xprofile Shell script выполняется при запуске сеанса системы X Window. Это выполняется для каждого пользователя, который входит в систему X Window. Это хороший выбор для записей PATH , которые действительны для каждого пользователя, такого как /usr/local/something/bin . Файл включен другим script, поэтому используйте синтаксис оболочки POSIX, а не синтаксис вашей пользовательской оболочки.
  • /etc/profile и /etc/profile.d/* Shell script. Это хороший выбор для систем с оболочкой. Эти файлы читаются только оболочками.
  • /etc/<shell>.<shell>rc . Shell script. Это плохой выбор, потому что он является уникальным для каждой оболочки.

Сеанс пользователя

/.xprofile Shell script. Это выполняется, когда пользователь входит в систему X Window System. Переменные, определенные здесь, видны для каждого приложения X. Идеальный выбор для расширения PATH со значениями, такими как

Спецификация для распространения

Спасибо за подробный ответ, это должно быть выше. Может быть, .bash_profile следует добавить в список? Я думаю, что лучший ответ предлагается /etc/environment . Но могу ли я обновить его без выхода и входа? Иногда я не использую bash или sh, поэтому source /etc/environment не работает. Отличный и на мой взгляд самый полный ответ. Должно быть намного выше. Моя причина для поиска этой темы была на самом деле Go. Рад видеть, что я не единственный, кто понял, что .bashrc не то место. ;)

Поместите объявление export в

/.bashrc . Мой .bashrc содержит следующее:

Это может зависеть от точной системы; Я не уверен, какие именно условия определяют, какой файл выполняется. Рад, что проблема была решена.

/.bashrc чтобы перезагрузить конфигурацию .bashrc . Тогда будет работать

/.bashrc. Я использую Ubuntu 14.04 LTS. Я очень новичок в Linux.

export слово export требуется только в том случае, если PATH еще не помечен как переменная окружения, что будет почти безоговорочно. Просто PATH=/var/lib/gems/1.8/bin:/home/fraxtil/.bin:$PATH будет иметь тот же эффект.

/.bashrc ) в текстовом редакторе, таком как nano, и наберите эту строку в конце файла. Путь будет изменен, как только вы откроете новый экземпляр bash

Это сработало для меня в системе CentOs. Я уверен, что это разные для разных дистрибутивов.

Вы можете установить $PATH навсегда двумя способами.

Чтобы установить путь для конкретного пользователя: Возможно, вам понадобится сделать запись в .bash_profile в домашнем каталоге пользователя.

например, в моем случае я установлю путь Java в профиле пользователя tomcat

Чтобы установить общий путь для всех пользователей системы, вам может потребоваться задать путь следующим образом:

В вашем дистрибутиве есть файл с именем /etc/profiles и символом s ? У меня нет s . Я думаю, что у вас есть опечатка. Вы, вероятно, хотите экранировать $, который вы пишете в файл профиля. например, echo "export PATH = \ $ PATH: / path / to / dir" >> / etc / profile, таким образом вы фактически добавляете переменную при запуске этого скрипта, а не устанавливаете ее в буквальное значение на основе его значения в время выполнения этой начальной команды.

Вы можете использовать для Centos или RHEL для локального пользователя:

Это добавит текущий каталог (или вы можете использовать другой каталог) в PATH, это сделает его постоянным, но вступит в силу при следующем входе в систему.

Если вы не хотите повторного входа в систему, можете использовать:

Я думаю, что самый элегантный способ:

1.add this в файле

/.bashrc Запустите эту команду

добавьте свой путь внутрь

Вы также можете установить постоянное редактирование одного из этих файлов:

/etc/profile (для всех пользователей)

/.bash_profile (для текущего пользователя)

/.bash_login (для текущего пользователя)

/.profile (для текущего пользователя)

Вы также можете использовать /etc/environment для установки постоянной переменной среды PATH, но она не поддерживает расширение переменной.

Вы можете добавить эту строку в конфигурационный файл консоли (например,.bashrc) или в .profile

У меня нет ни одного из этих файлов в /home/(username) @ClickUpvote: Какую оболочку вы используете? (И файлы, начинающиеся с точки, скрыты, вам нужно что-то вроде ls -a чтобы увидеть их.) Я вижу .profile там на второй взгляд. Работай сейчас, ты. Если у вас нет ни одного из этих файлов (bashrc или профиля), вы можете создать их вручную, и они будут автоматически использоваться

Я наткнулся на этот вопрос вчера, когда искал способ добавить папку, содержащую мои собственные скрипты, в PATH - и был удивлен, узнав, что мой собственный

/.profile файл (на Linux Mint 18.1) уже содержал это:

Таким образом, все, что мне нужно было сделать, это создать папку

/bin и поместить туда мои скрипты.

Мой ответ относится к настройке go-lang на Ubuntu linux/amd64 . Я столкнулся с такой же проблемой при настройке пути переменных окружения ( GOPATH и GOBIN ), потеряв его при выходе из терминала и перестраивая его с помощью source <file_name> каждый раз. Ошибка заключалась в том, чтобы поместить путь ( GOPATH и GOBIN ) в папку

/.bash_profile . Потеряв несколько хороших часов, я обнаружил, что решение заключалось в том, чтобы положить GOPATH и GOBIN в файл

/.bash_rc следующим образом:

и при этом установка go работала нормально, и потерь пути не было.

ИЗМЕНИТЬ 1: Причина, по которой эта проблема может быть связана, заключается в том, что настройки для не-регистрационных оболочек, таких как ваш терминал ubuntu или gnome-terminal, где мы запускаем код go, берутся из файла

Favorite

Добавить в избранное

Главное меню » Linux » Объяснение команды export в Linux

Объяснение команды export в Linux

К оманда export в Linux используется для создания переменных среды. Вы можете использовать ее так:

или сокращение как здесь, чтобы присвоить значение сразу:

Вы можете увидеть значение экспортируемых переменных с помощью команды echo :

Чтобы сделать изменения постоянными, вы должны добавить их в файл

Это было просто краткое изложение. Давайте посмотрим ее в деталях, чтобы лучше понять.

Понимание того, как работает команда export

В приведенном ниже примере мы объявляем переменную оболочки var и присваиваю ей значение 3. Пока это переменная оболочки.

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

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

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

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

Сделать экспортированные переменные оболочки «постоянными» с помощью файла bashrc

Но борьба не заканчивается здесь. Если вы закроете сеанс, выйдете из терминала, выйдете из системы или перезагрузите систему, ваша переменная среды снова исчезнет.

Вот почему принято добавлять команду export в файл конфигурации среды выполнения (rc) вашей оболочки.

Читать Изменить группы в Linux с помощью команды groupmod

Каждая оболочка имеет этот rc-файл, расположенный в домашнем каталоге пользователя, который используется для определения переменных и другой конфигурации при запуске оболочки. Как пользователь, вы можете использовать этот файл rc для настройки вашей оболочки и ее поведения.

Если вы используете оболочку bash, у вас должен быть файл bashrc в

/.bashrc. Вы можете отредактировать этот файл в текстовом редакторе, таком как Vim, или просто добавить к нему файл export var = 3 (или что-либо, что вы экспортируете).

Сделав это, вы должны использовать исходную команду, чтобы сделать изменения доступными немедленно.

Хорошей практикой является хранение всех пользовательских переменных среды в одном месте.

Зачем использовать команду экспорта?

Например, если вы установили maven и хотите иметь возможность его запустить, вы должны добавить в каталог расположение исполняемых файлов maven следующим образом:

Что оно делает? Он добавляет это местоположение каталога к пути. Когда вы пытаетесь запустить команду в Linux, ваша система ищет ее исполняемый файл (обычно в каталоге bin) в каталогах, упомянутых в переменной PATH.

Мы настоятельно рекомендуем прочитать о структуре каталогов Linux, чтобы иметь лучшее представление.

Бонус Совет: удалить переменную из списка экспорта

Мы надеемся, что у вас теперь создалось представление о команде export в Linux. Если у вас есть сомнения, пожалуйста, не стесняйтесь спрашивать в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Читайте также: