При использовании ssh, у Вас может просто быть выполненный вместо оболочки (значение по умолчанию), когда Вы соединяетесь.
ssh -t me@host screen -RD
Это создаст новую сессию, каждый не существует или иначе соединяется с существующей сессией.
-t
отметьте к ssh, говорит создать имущество даже при том, что он не запускает оболочку. Вам нужно это для интерактивного использования.
Предполагается, что работает так, что в момент, когда вы получаете приглашение оболочки, оба .profile
и .bashrc
были запущены. Конкретные детали того, как вы дошли до этой точки, имеют второстепенное значение, но если какой-либо из файлов вообще не запускается, у вас будет оболочка с неполными настройками.
Причина, по которой эмуляторы терминала в Linux (и других системах на базе X) не нуждаются в для запуска .profile
сами по себе, как правило, он запускается уже при входе в систему X. Предполагается, что настройки в .profile
относятся к тому типу, который может быть унаследован подпроцессами, при условии, что он выполняется один раз, когда вы входите в систему (например, через .Xsession
), любые другие подоболочки не нуждаются в повторном запуске.
Как объясняется на вики-странице Debian , на которую ссылается Алан Шутко:
«Почему тогда
.bashrc
отдельный файл от.bash_profile
? выполняется в основном по историческим причинам, когда машины были чрезвычайно медленными по сравнению с сегодняшними рабочими станциями. Обработка команд в.profile
или.bash_profile
могла занять довольно много времени, особенно на машине, где большая часть работы должна была выполняться внешними командами (pre-bash). Таким образом, сложные команды начальной настройки, которые создают переменные среды, которые могут быть переданы дочерним процессам, помещаются в.bash_profile
. Временные параметры и псевдонимы, которые не наследуются, помещаются в.bashrc
, так что они могут быть перечитаны каждой подоболочкой. "
Все те же правила действуют и для OSX, за исключением одно - графический интерфейс OSX не запускает .profile
при входе в систему, по-видимому, потому, что у него есть собственный метод загрузки глобальных настроек. Но это означает, что эмулятор терминала в OSX действительно должен запускать .profile
(сообщая запускаемой оболочке, что это оболочка входа в систему), иначе вы получите потенциально искалеченный снаряд.
Что-то вроде глупой особенности bash, которой нет у большинства других оболочек, заключается в том, что он не запускает автоматически .bashrc
, если он запускается как оболочка входа в систему. Стандартный обходной путь для этого - включить что-то вроде следующих команд в .bash_profile
:
[[ -e ~/.profile ]] && source ~/.profile # load generic profile settings
[[ -e ~/.bashrc ]] && source ~/.bashrc # load aliases etc.
В качестве альтернативы можно вообще не иметь .bash_profile
, а просто включить некоторые Специфичный для bash код в общем файле .profile
для запуска .bashrc
при необходимости.
Если OSX по умолчанию .bash_profile
или .profile
не делает этого , то это, вероятно, ошибка. В любом случае правильным решением будет просто добавить эти строки в .bash_profile
.
Правка: Как отмечает Strugee , оболочкой по умолчанию в OSX была оболочка tcsh, чье поведение в этом отношении гораздо разумнее: при запуске в качестве оболочки для интерактивного входа tcsh автоматически считывает оба . profile
и .tcshrc
/ .cshrc
, и, следовательно, не требует каких-либо обходных решений, таких как трюк .bash_profile
, показанный выше.
Основываясь на этом, я на 99% уверен, что отказ OSX предоставить соответствующий по умолчанию .bash_profile
вызван тем, что, когда они переключились с tcsh на bash, люди в Apple просто не сделали этого. обратите внимание на эту небольшую бородавку в поведении запуска bash. С tcsh такие уловки не потребовались - запуск tcsh в качестве оболочки входа из эмулятора терминала OSX Just Plain Works и делает все правильно без таких проблем.