Как я могу установить путь, чтобы он мог быть прочитан из графического интерфейса и командной строки одной и той же программой?

Я установил texlive и хочу добавить его в качестве переменной окружения в мой путь, чтобы Emacs AucTeX мог читать его, когда я запускаю emacs из графического интерфейса или из командной строки. До сих пор я читал, что emacs читает только файлы из ~/.profile.

Поэтому я планирую добавить texlive к моему пути в .profile, чтобы позволить emacs GUI прочитать его, а затем получить источник ~/profile из .bashrc для того, чтобы emacs запускался внутри моего не входящего в систему интерактивного терминала GNOME в увидеть путь.

Примечание: у меня нет файла .profile в моем домашнем каталоге, только в моем /etc каталоге, и я бы не стал его трогать, но у меня есть .bash_profile в моем домашнем каталоге. Однако я прочитал, что .bash_profile запускается только для интерактивного сеанса входа в систему, то есть в режиме консоли, который я не использую.

Я планирую создать файл .profile в моем домашнем каталоге и сделать следующее:

Шаг 1: Создать ~/.profile

Шаг 2: Добавить переменную среды texlive в путь в .profile

export PATH=/usr/local/texlive/2018/bin/x86_64-linux:$PATH
export MANPATH=/usr/local/texlive/2018/texmf-dist/doc/man:$MANPATH
export INFOPATH=/usr/local/texlive/2018/texmf-dist/doc/info:$INFOPATH

Шаг 3: Источник .profile из .bashrc

#Adding this at the bottom or start of .bashrc to source .profile when the terminal is opened.

if [-s ~/.profile]; then;
    source ~/.profile;
fi

Я знаю, что есть много опасений в отношении источников .profile из .bashrc ] из-за риска возникновения бесконечной петли. Однако, поскольку я создаю файл .profile с нуля, это не будет проблемой, так как он не будет содержать код, ссылающийся на .bashrc.

Мои вопросы:

  1. Что вы думаете о моем плане?
  2. Как вы думаете, он сработает?
  3. Есть ли у вас какие-либо предложения о том, как улучшить его или, возможно, другие альтернативы

Дополнительная информация : My .bashrc содержит только код, который содержит источники ~/etc/bashrc, и одну переменную среды, которая была автоматически добавлена ​​Anaconda: export PATH="/home/Fedora_User/Anaconda3/bin:$PATH"

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

2
задан 12 June 2018 в 00:28

1 ответ

Во-первых, обратите внимание на это, если Вы хотите ~/.profile чтобы быть считанными, необходимо будет удалить ~/.bash_profile, иначе ~/.profile будет проигнорирован Bash.

Вы на самом деле сверхусложняете это немного. ПУТЬ установлен в /etc/environment. Это всегда exportредактор уже, таким образом, это не должно быть экспортировано снова.

Если Вы вносите изменения в свой ПУТЬ в ~/.profile они будут наследованы каждой оболочкой, является ли это оболочкой входа в систему, интерактивной или иначе.

Другие переменные, экспортируемые в ~/.profile будет также передан в среду и будет доступен в каждой оболочке. ~/.profile читается однажды, когда Вы входите в систему своей сессии, и экспортируемые переменные остаются экспортируемыми.

Определение источника ~/.profile в ~/.bashrc плохая идея. ~/.profile источники ~/.bashrc таким образом, Вы получите бесконечный цикл. Даже если ~/.profile не получает ~/.bashrc это - плохая идея иметь ~/.bashrc источник ~/.profile или любой другой файл с присвоениями как

PATH=$PATH:/some/other/place

потому что каждый раз интерактивная оболочка запускает другую интерактивную оболочку, ПУТЬ будет расширен..., Вы закончите со своим ПУТЕМ тем, чтобы быть

/original/path:/some/other/place:/some/other/place:/some/other/place

и т.д.

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

Поэтому я предлагаю:

Переименовать ~/.bash_profile ~/.profile

Добавьте строки:

PATH="$PATH:/usr/local/texlive/2018/bin/x86_64-linux"
export MANPATH=":/usr/local/texlive/2018/texmf-dist/doc/man"
export INFOPATH=":/usr/local/texlive/2018/texmf-dist/doc/info"

Примечания, которые я добавил к ПУТИ вместо предварительного ожидания. Можно предварительно ожидать (помещенный $PATH в конце вместо начала), если Вы хотите. Первый исполняемый файл, найденный в поиске пути, выполняется, поэтому если две программы в различных местоположениях ПУТИ будут иметь то же имя, то тот в каталоге, который на первом месте (далее налево) в ПУТИ, будет выполнен.

Ничего не добавляйте к Вашему ~/.bashrc. Переменные среды измененные, или новые переменные, экспортируемые в ~/.profile будет доступно каждой оболочке и не должными быть дополнительно устанавливаться в другом месте.

Также обратите внимание, что Вы не должны получать /etc/bash.bashrc в ~/.bashrc, потому что /etc/bash.bashrc уже получен каждой интерактивной оболочкой сначала*, и мы используем ~/.bashrc вносить последующие корректировки.

*Исключение - /etc/bash/bashrc проверки, что оболочка является интерактивным использованием ненадежного метода - это проверяет, что PS1 установлен. Если Вы запускаете оболочку, сбрасывающую PS1, /etc/bash.bashrc не будет получен, даже при том, что оболочка является интерактивной. Другое исключение - когда оболочка запускается с --norc, но это более очевидно.

3
ответ дан 2 December 2019 в 02:43

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

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