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

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

Поэтому мой план состоит в том, чтобы добавить texlive к моему пути в .profile, чтобы включить emacs GUI для его чтения, а затем source ~/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 из-за риска возникновения цикла infinte. Однако, поскольку я создаю файл .profile с нуля, это не будет проблемой, так как он не будет содержать никакого кода, который ссылается на .bashrc.

Мои вопросы:

Что делать вы думаете о моем плане? Считаете ли вы, что это сработает? У вас есть какие-либо предложения по его улучшению или, возможно, другие альтернативы

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

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

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

2 ответа

Во-первых, обратите внимание, что если вы хотите читать ~/.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, но это более очевидно.

3
ответ дан 17 July 2018 в 14:31

Во-первых, обратите внимание, что если вы хотите читать ~/.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, но это более очевидно.

3
ответ дан 20 July 2018 в 14:35

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

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