Я использую Linux Mint. Мой логин ( cat /etc/passwd | grep myUserName) - это bash.
После того, как я запустил свое графическое окружение рабочего стола и запустил из него эмулятор терминала, я увидел, что .bash_profileон не получен (измененные exportв нем переменные среды не установлены). Но если я вхожу из текстовой консоли ( ctrl+ alt+ F1) или вручную запускаю bash -lиз эмулятора терминала, .bash_profileработает нормально.
Я ошибаюсь, когда думаю, что он .bash_profileдолжен быть получен при запуске X, и все exported-переменные должны быть доступны в терминале, запущенном из X?
PS Помещать все .bashrcи получать из этого .bash_profileне очень хорошая идея ( https://stackoverflow.com/questions/902946/ ): окружение должно быть получено только один раз.
Файл ~/.bash_profileчитается bash, когда он является оболочкой входа в систему. Это то, что вы получаете, когда вы входите в текстовом режиме.
Когда вы входите в систему под X, сценарии запуска выполняются /bin/sh. На Ubuntu и Mint, /bin/shэто тире , а не Bash. Dash и bash оба имеют одинаковые основные функции, но dash придерживается этих основных функций для того, чтобы быть быстрым и небольшим, тогда как bash добавляет множество функций за счет необходимости большего количества ресурсов. Обычно для сценариев, которые не нуждаются в дополнительных функциях, используется dash, а для интерактивного использования bash (хотя zsh обладает множеством более приятных функций ).
Большинство комбинаций менеджера дисплея (программа , где вы вводите имя пользователя и пароль) и окружение рабочего стола читать ~/.profileиз сценариев входа в /etc/X11/Xsession, /usr/bin/lightdm-session, /etc/gdm/Xsessionили в зависимости от того применимо. Поэтому поместите определения переменных вашей среды в ~/.profile. Убедитесь, что вы используете только тот синтаксис, который поддерживает dash.
Так что вы должны положить куда?
Хорошо .bash_profileзагружается .profileи загружается, .bashrcесли оболочка является интерактивной.
.~/.profile
if[[ $-==*i*]];then.~/.bashrc;fi
В .profile, поместите определения переменных среды и другие параметры сеанса, такие как ulimit.
В .bashrc, положить Баш интерактивные настройки , таким как псевдонимы, функция завершение, привязки клавиша (которые не находятся в .inputrc), ...
.bash_profileскрипт запуска конфигурации bash Не существует стандартного поручения X источнику .bash_profile.
То, о чем вы думаете, довольно .profile . Первоначально это был файл конфигурации запуска оболочки Bourne (sh). Сегодня во многих дистрибутивах среда рабочего стола настроена на исходный код .profile. Обратите внимание, что это тоже не стандарт, но, похоже, это соглашение.
Частично это правильно, но «всегда читать ~/.bashrc» - плохой совет: читать.bashrc следует только из интерактивной оболочки . Здесь вы упустили основную проблему, заключающуюся в том, что при входе в систему под X нет экземпляра входа bash (при большинстве комбинаций диспетчера отображения и среды рабочего стола, включая, очевидно, AntonioK).
Жиль "ТАК - перестань быть злым"
Спасибо за ваш отзыв. Я надеюсь, что обновил свой ответ достаточно хорошо, чтобы разрешить ваши жалобы. Что касается моего совета «всегда читать .bashrc», я всегда имел в виду интерактивную оболочку. Я уточнил эту часть. Я надеюсь, что это больше не вводит в заблуждение.
Lesmana
2
« Ubuntu специально не рекомендует использовать .profile( ссылка ) » Вики однажды (нелепо) обескуражили это; это было исправлено. (Примечание /etc/profileне рекомендуется для общесистемных назначений, предпочтительнее добавлять сценарии для них /etc/profile.d.) .profileФайлы для каждого пользователя теперь представлены в качестве одного из рекомендуемых способов установки переменных среды для каждого пользователя: «Подходящие файлы для настроек переменных среды, которые должны влиять только на Конкретным пользователем (а не системой в целом) являются ~ / .pam_environment и ~ / .profile . "
Элия Каган
На связанной странице о Debian указано, что Debian не читает ~/.profileдля графического входа в систему и ~/.xsessionrcдолжен использоваться вместо него.
Карора
спасибо, что заметили. страница вики была обновлена. я связался с версиями, как они были во время ответа.
При попытке перезагрузить файл / source ~ / .profile возникает пара проблем. [Это относится к Ubuntu Linux - в некоторых случаях детали команд будут другими]
Вы запускаете это прямо в терминале или в сценарии?
Как вы запускаете это в сценарии?
Объявление. 1)
Выполнение этого непосредственно в терминале означает, что не будет создано подоболочки. Таким образом, вы можете использовать любую из двух команд:
source ~/.bash_profile
или
.~/.bash_profile
В обоих случаях это обновит среду с содержимым файла .profile.
Объявление 2) Вы можете запустить любой скрипт bash, позвонив
sh myscript.sh
или
. myscript.sh
В первом случае это создаст подоболочку, которая не повлияет на переменные среды вашей системы, и они будут видны только процессу подоболочки. После завершения команды subshell ни один из экспортов и т. Д. Не будет применен. Это общая ошибка и вызывает много разработчиков, чтобы потерять много времени.
Чтобы ваши изменения, примененные в вашем скрипте, оказали влияние на глобальную среду, скрипт должен быть запущен с
.myscript.sh
команда.
Чтобы убедиться, что ваш скрипт не запущен на подшеле, вы можете использовать эту функцию. (Опять пример для оболочки Ubuntu)
#/bin/bash
preventSubshell(){if[[ $_ != $0 ]]then
echo "Script is being sourced"else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;fi}
Я надеюсь, что это устраняет некоторые распространенные недоразумения! : D Удачи!
Простое решение - сделать терминал терминалом входа в систему. Для терминала Gnome в разделе «Плитка и команда» профиля по умолчанию вы можете установить флажок «Запускать команду как оболочку входа». В этой статье объясняется разница между оболочкой входа в систему и оболочкой, которая не является.
.bash_profile
скрипт запуска конфигурации bash Не существует стандартного поручения X источнику.bash_profile
.То, о чем вы думаете, довольно
.profile
. Первоначально это был файл конфигурации запуска оболочки Bourne (sh). Сегодня во многих дистрибутивах среда рабочего стола настроена на исходный код.profile
. Обратите внимание, что это тоже не стандарт, но, похоже, это соглашение.Debian раньше использовал для
.profile
входа в систему при графическом входе в систему ( страница вики по состоянию на 2013 год ), но теперь его нет вики-страница на 2016 год ).Архивные источники
.xprofile
при графическом входе в систему ( страница вики от 2013 года ).Ubuntu раньше не поощрял использование
.profile
( страница вики с 2013 года ), теперь он больше не препятствует ( страница вики с 2016 года) ).Относительно вашего другого вопроса: почему мой ~ / .bash_profile не работает? Это ожидаемое поведение.
Короче говоря, поведение выглядит следующим образом:
~/.profile
~/.bashrc
Для получения более подробной информации смотрите мой ответ на аналогичный вопрос в askubuntu: https://askubuntu.com/questions/132276/configure-gnome-terminal-to-start-bash-as-a-login-shell-doesnt-read-bashrc / 132319 # 132319
источник
~/.bashrc
» - плохой совет: читать.bashrc
следует только из интерактивной оболочки . Здесь вы упустили основную проблему, заключающуюся в том, что при входе в систему под X нет экземпляра входа bash (при большинстве комбинаций диспетчера отображения и среды рабочего стола, включая, очевидно, AntonioK)..bashrc
», я всегда имел в виду интерактивную оболочку. Я уточнил эту часть. Я надеюсь, что это больше не вводит в заблуждение..profile
( ссылка ) » Вики однажды (нелепо) обескуражили это; это было исправлено. (Примечание/etc/profile
не рекомендуется для общесистемных назначений, предпочтительнее добавлять сценарии для них/etc/profile.d
.).profile
Файлы для каждого пользователя теперь представлены в качестве одного из рекомендуемых способов установки переменных среды для каждого пользователя: «Подходящие файлы для настроек переменных среды, которые должны влиять только на Конкретным пользователем (а не системой в целом) являются ~ / .pam_environment и ~ / .profile . "~/.profile
для графического входа в систему и~/.xsessionrc
должен использоваться вместо него.В своем вопросе вы ссылаетесь на https://stackoverflow.com/questions/902946/ как рекомендацию не указывать источник, когда принятый ответ предписывает
Помещение всего
.profile
этого не работало для меня на Linux Mint. Использование.bashrc
работало нормально.источник
При попытке перезагрузить файл / source ~ / .profile возникает пара проблем. [Это относится к Ubuntu Linux - в некоторых случаях детали команд будут другими]
Объявление. 1)
Выполнение этого непосредственно в терминале означает, что не будет создано подоболочки. Таким образом, вы можете использовать любую из двух команд:
или
В обоих случаях это обновит среду с содержимым файла .profile.
Объявление 2) Вы можете запустить любой скрипт bash, позвонив
или
В первом случае это создаст подоболочку, которая не повлияет на переменные среды вашей системы, и они будут видны только процессу подоболочки. После завершения команды subshell ни один из экспортов и т. Д. Не будет применен. Это общая ошибка и вызывает много разработчиков, чтобы потерять много времени.
Чтобы ваши изменения, примененные в вашем скрипте, оказали влияние на глобальную среду, скрипт должен быть запущен с
команда.
Чтобы убедиться, что ваш скрипт не запущен на подшеле, вы можете использовать эту функцию. (Опять пример для оболочки Ubuntu)
Я надеюсь, что это устраняет некоторые распространенные недоразумения! : D Удачи!
источник
Простое решение - сделать терминал терминалом входа в систему. Для терминала Gnome в разделе «Плитка и команда» профиля по умолчанию вы можете установить флажок «Запускать команду как оболочку входа». В этой статье объясняется разница между оболочкой входа в систему и оболочкой, которая не является.
источник