Я установил texlive, и я хочу добавить его как переменную окружения в свой Path, чтобы Emacs AucTeX мог прочитать его, когда я запускаю emacs из графического интерфейса или из командной строки. До сих пор я читал, что emacs читает только файлы из ~/.profile.
Поэтому мой план состоит в том, чтобы добавить texlive к моему пути в .profile, чтобы включить emacs GUI для его чтения, а затем source ~/profile из .bashrc для emacs, который запускается внутри моего интерактивного терминала GNOME без входа в систему, чтобы увидеть путь.
Примечание. У меня нет файла .profile в моем домашнем каталоге, только в моем /etc, и я бы не стал касаться этого, но у меня есть .bash_profile в моем домашнем каталоге. Тем не менее, я читал, что .bash_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 из-за риска возникновения цикла infinte. Однако, поскольку я создаю файл .profile с нуля, это не будет проблемой, так как он не будет содержать никакого кода, который ссылается на .bashrc.
Дополнительная информация: В моем .bashrc содержится только код, который содержит источники ~/etc/bashrc и одну переменную среды, которая была автоматически добавлена Anaconda: export PATH="/home/Fedora_User/Anaconda3/bin:$PATH"
Имейте в виду, что я знаю, что gnome-terminal может быть запущен как интерактивная оболочка входа, но я этого никогда не делал и не знаю, повлияет ли это на производительность моих сеансов терминала.
Во-первых, обратите внимание, что если вы хотите читать ~/.profile, вам нужно удалить ~/.bash_profile, иначе ~/.profile будет проигнорирован Bash.
Вы на самом деле чрезмерны. немного. PATH установлен в /etc/environment.
Если вы вносите изменения в свой PATH в ~/.profile, они будут наследоваться каждой оболочкой, независимо от того, является ли она логином shell, интерактивный или другой.
Другие переменные, экспортируемые в ~/.profile, также будут переданы в среду и будут доступны в каждой оболочке. ~/.profile читается один раз, когда вы входите в свою сессию, а экспортируемые переменные остаются экспортированными.
Sourcing ~/.profile в ~/.bashrc - плохая идея. ~/.profile sources ~/.bashrc, поэтому вы получите бесконечный цикл. Даже если ~/.profile не является источником ~/.bashrc, неплохо иметь источник ~/.bashrc ~/.profile или любой другой файл с такими назначениями, как
PATH=$PATH:/some/other/place
, потому что каждый раз, когда интерактивная оболочка запускает другую интерактивная оболочка PATH будет расширена ... в конечном итоге ваша PATH будет
/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 вместо добавления. Вы можете добавить (поместите $PATH в конец, а не в начало), если хотите. Первый исполняемый файл, найденный в поиске путей, запускается, поэтому, если две программы в разных местах PATH имеют одно и то же имя, то в каталоге, который будет первым (далее слева) в PATH, будет запущен.
Не добавляйте ничего к своему ~/.bashrc. Измененные переменные среды или новые переменные, экспортированные в ~/.profile, будут доступны для каждой оболочки и не должны быть дополнительно установлены в другом месте.
Также обратите внимание, что вы не должны указывать /etc/bash.bashrc в ~/.bashrc , потому что /etc/bash.bashrc уже используется каждой интерактивной оболочкой first *, и мы используем ~/.bashrc для выполнения последующих настроек.
* Исключение - /etc/bash/bashrc проверяет, является ли оболочка интерактивной, используя ненадежный метод - он проверяет, что установлен PS1. Если вы запускаете оболочку, не устанавливающую PS1, /etc/bash.bashrc не будет получен, хотя оболочка будет интерактивной. Другим исключением является запуск оболочки с помощью --norc, но это более очевидно.
Во-первых, обратите внимание, что если вы хотите читать ~/.profile, вам нужно удалить ~/.bash_profile, иначе ~/.profile будет проигнорирован Bash.
Вы на самом деле чрезмерны. немного. PATH установлен в /etc/environment.
Если вы вносите изменения в свой PATH в ~/.profile, они будут наследоваться каждой оболочкой, независимо от того, является ли она логином shell, интерактивный или другой.
Другие переменные, экспортируемые в ~/.profile, также будут переданы в среду и будут доступны в каждой оболочке. ~/.profile читается один раз, когда вы входите в свою сессию, а экспортируемые переменные остаются экспортированными.
Sourcing ~/.profile в ~/.bashrc - плохая идея. ~/.profile sources ~/.bashrc, поэтому вы получите бесконечный цикл. Даже если ~/.profile не является источником ~/.bashrc, неплохо иметь источник ~/.bashrc ~/.profile или любой другой файл с такими назначениями, как
PATH=$PATH:/some/other/place
, потому что каждый раз, когда интерактивная оболочка запускает другую интерактивная оболочка PATH будет расширена ... в конечном итоге ваша PATH будет
/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 вместо добавления. Вы можете добавить (поместите $PATH в конец, а не в начало), если хотите. Первый исполняемый файл, найденный в поиске путей, запускается, поэтому, если две программы в разных местах PATH имеют одно и то же имя, то в каталоге, который будет первым (далее слева) в PATH, будет запущен.
Не добавляйте ничего к своему ~/.bashrc. Измененные переменные среды или новые переменные, экспортированные в ~/.profile, будут доступны для каждой оболочки и не должны быть дополнительно установлены в другом месте.
Также обратите внимание, что вы не должны указывать /etc/bash.bashrc в ~/.bashrc , потому что /etc/bash.bashrc уже используется каждой интерактивной оболочкой first *, и мы используем ~/.bashrc для выполнения последующих настроек.
* Исключение - /etc/bash/bashrc проверяет, является ли оболочка интерактивной, используя ненадежный метод - он проверяет, что установлен PS1. Если вы запускаете оболочку, не устанавливающую PS1, /etc/bash.bashrc не будет получен, хотя оболочка будет интерактивной. Другим исключением является запуск оболочки с помощью --norc, но это более очевидно.