В современной системе не так часто встречаются случаи, когда это важно, но это случается. (В частности, если вы используете операции оболочки в vim
такой форме :r !command
или в !<motion>command
виде строки .)
Что бы вы поместили в ~ / .bashrc? только псевдонимы?
Вы помещаете вещи ~/.bashrc
, которые не будут наследоваться подоболочками автоматически; в основном это псевдонимы и функции, хотя иногда у вас есть переменные настройки, которые вы не хотите видеть вне оболочки (это очень редко). Можно утверждать, что их нужно каким-то образом экспортировать, но различные экспериментальные попытки натолкнулись на проблемы совместимости с попытками скрыть их в среде и в большинстве случаев были оставлены.
Если я хочу установить переменную окружения и добавить ее в PATH (например, JAVA_HOME), где это было бы лучшим местом для размещения записи экспорта? в ~ / .bash_profile или ~ / .bashrc?
Вы помещаете настройки среды ~/.bash_profile
так, чтобы им были даны нормальные начальные настройки. Иногда вы захотите переопределить их (часто это делается в сложных средах, таких как Matlab или Cadence); если вы установите параметры среды, ~/.bashrc
тогда оболочки, запускаемые из этих сред, потеряют настройки среды, и в результате все может работать неправильно. Это также применимо, если вы используете такие пакеты, как модули , virtualenv , rvm и т. Д. Для управления несколькими средами разработки; установка ваших настроек ~/.bashrc
означает, что вы не можете запустить желаемую среду из вашего редактора, но вместо этого будете вынуждены перейти в систему по умолчанию.
Я полагаю, что в оболочке без входа в систему ~ / .bash_profile не «подхватывается».
Это верно; Вы обычно хотите, чтобы начальная оболочка была оболочкой входа в систему, и любые оболочки, запущенные под этой оболочкой, не были оболочками входа в систему. Если исходная оболочка не является оболочкой входа, у вас не будет стандартных PATH
настроек или других настроек (включая ваш JAVA_HOME
пример).
В большинстве сред рабочего стола, запускаемых из диспетчера отображения (то есть подавляющего большинства графических входов в систему), среда рабочего стола не настраивается для всего рабочего стола, поэтому вы вынуждены запускать начальную оболочку в терминалах в качестве оболочки входа в систему. Это вызывает ряд проблем (в частности, то, что PATH
и то, что доступно для программ, запускаемых, например, с панелей, не настроено должным образом, поскольку панель не является терминалом и не работает ~/.bash_profile
), но является разумным компромиссом, учитывая, что это не всегда возможно разумно работать ~/.bash_profile
в неинтерактивной среде в начале сеанса, запускаемого диспетчером отображения, в зависимости от его содержимого. Иногда предлагается поместить настройки среды в~/.bashrc
вместо того, чтобы настраивать оболочку входа в систему; как обсуждалось выше, это работает до тех пор, пока вам не нужно переопределять эту среду, и вызывает странные сбои, когда вам это нужно.
Недавно я помог диагностировать проблему, подобную этой, в OS X, когда пользователь, который поместил настройки, ~/.bashrc
затем позже начал использовать, rvm
и perlbrew увидел странное поведение, потому что среды, созданные этими двумя, были «отменены» ~/.bashrc
внутренними редакторами и sudo
(которые в OS X , в отличие от Linux, распространяет пользователя $HOME
так, чтобы его ~/.bashrc
запускала корневая оболочка). Прежде чем пытаться использовать эти среды, проблем не было; начав использовать их, они были сбиты с толку неожиданной потерей своих настроек.
modules
иrvm
являются инструментами разработчика, так же как Matlab и Cadence для несколько разных определений «разработчик». Простое развитие также не требует от них, но когда вам нужно тест с несколькими версиями Ruby, Perl или Python , то вы действительно хотите что - то подобноеrvm
,perlbrew
иvirtualenv
(соответственно) вокруг , чтобы помочь сохранить все это прямо.Честно говоря, в наши дни разница невелика, несмотря на то, что сказал гуру.
проблема заключается в том, что в настоящее время мы входим в систему графически, а не через оболочку входа. В прошлом пользователям Unix нравилось видеть короткий отчет о том, что происходит на сервере сразу после входа в систему - затем мы запускаем X из командной строки - для создания этого отчета часто требуется некоторое время (например, 10-20 секунд). и тогда мы не хотим видеть то же самое, когда начинаем, например, xterm. таким образом, разница.
В настоящее время я не думаю, что это различие сейчас важно. Я думаю, что в наши дни, если вы используете bashrc в bash_profile, никто не сможет обвинить вас.
обратите внимание, что это не относится к macos x (каждый запущенный терминал.app является оболочкой входа в систему)
источник
~/.bash_profile
нет исходного кода~/.bashrc
, довольно сложна для работы и граничит со сломанной. Приложения с графическим терминалом означают, что проще всего получить ~ / .bashrc и поместить туда всю конфигурацию.Ну, насчет "Графического логина", это зависит от того, какую * DM вы используете ...
С GDM (Gnome 3.18) у меня есть это:
/ И т.д. / GDM / Xsession
Итак, ~ / .profile получен при входе в систему с использованием / bin / sh, а не / bin / bash
Есть два случая
Таким образом, профиль / bin / sh - это ~ / .profile, а не ~ / .bash_profile, ~ / .zprofile
Этот файл должен использоваться для параметров «независимой от оболочки» , таких как переменные пути и среды.
Никакая исполняемая программа для взаимодействия с пользователем только для входа должна быть здесь (проверка почты, состояние и т. Д.)
~ /.* rc предназначены только для "интерактивных" сессий (например, псевдонимы ...)
Существует разница между bash и zsh для интерактивных оболочек входа
исходники bash только .bash_profile, а исходники zsh в следующем порядке:
Правильный способ сделать ~ / .bash_profile был дан ответ здесь:
Разница между .bashrc и .bash_profile
Чтобы включить тестирование (и профилирование), вы можете использовать это
~ / .Bash_profile:
~ / .Zprofile:
Затем, чтобы проверить:
Так что RVM / virtualenv должны идти в ~ / .profile, ИМХО
Но это НЕ РАБОТАЕТ , иногда ...
Например, virualenvwrapper работает только в том случае, если оболочка с Xsession представляет собой «оригинальный» bash (экспорт BASH_VERSION)
Если вы работаете в системе dash , переменная окружения и настройка пути работают, но определение функции virualenvwrapper не работает, поскольку сценарий не совместим с POSIX.
Скрипт не выдает никакой ошибки, но заканчивается без определения "workon" .
Таким образом, вы можете настроить среду в ~ / .profile , просто чтобы включить правильное выполнение Python из клиента, запущенного непосредственно из X:
https://gist.github.com/datagrok/2199506
https://www.bountysource.com/issues/9061991-setting-up-your-computer-virtualenvwrapper-linux-all
Но для virualenvwrapper у вас есть две альтернативы:
Это означает, что X-клиенты (например, emacs) должны запускаться из оболочки терминала, а не из графической оболочки!
«Я не могу получить никакого удовлетворения ...»
источник