.profile
по сравнению с. .zprofile
Выполнения Zsh ~/.zprofile
, нет ~/.profile
, когда это вызывается как оболочка входа в систему. Причина состоит в том, что zsh имеет достаточно несовместимостей со стандартными оболочками для повреждения сценариев.
Zsh действительно работает ~/.profile
если это называют как sh
или ksh
. Но если Ваша цель состоит в том, чтобы получить подсказку zsh, когда Вы входите в систему, это не справка.
Можно сделать /bin/sh
Ваша оболочка входа в систему и включает export SHELL=/bin/zsh
в Вашем ~/.profile
. Затем при открытии терминала терминал запустится, zsh (за исключением нескольких эмуляторов терминала не повинуются $SHELL
установка). Но Вы будете все еще иметь sh
когда Вы входите в систему по ssh. Это может быть исправлено включением exec zsh
в конце ~/.profile
(это заменяет рабочую оболочку zsh), но необходимо быть осторожными только, чтобы сделать это для интерактивных логинов и не когда ~/.profile
включен из других сценариев, таких как X сессий, запускаются (хороший тест является названием родительского процесса, полученного ps -o comm= $PPID
: если это sshd
или su
, затем безопасно exec
).
Самое легкое решение и работать с zsh и работать ~/.profile
должен создать a ~/.zprofile
это переходит к sh режиму эмуляции, в то время как он работает ~/.profile
:
emulate sh
. ~/.profile
emulate zsh
Если у Вас есть достаточно недавний zsh (на Ubuntu, которая означает с тех пор ясный, я думаю), можно упростить это до emulate sh -c '. ~/.profile'
.
.zprofile
по сравнению с. .zshrc
Файл ~/.profile
загружается оболочками входа в систему. Оболочка входа в систему является первым процессом, который запускается, когда Вы входите в систему в текстовом режиме, например, на текстовой консоли или через ssh. По умолчанию, на большинстве машин Linux, оболочка входа в систему является ударом, но можно изменить его с chsh
команда, или через некоторый другой инструмент, такой как “Пользовательские Настройки” в Ubuntu. Когда это - оболочка входа в систему, чтения удара ~/.bash_profile
если это существует и ~/.profile
, тогда как zsh читает только ~/.zprofile
(потому что его синтаксис не абсолютно совместим с традиционным sh). В соответствии с большинством конфигураций, ~/.profile
также загружается X сценариями запуска сессии, когда Вы входите в систему в менеджере по графическому дисплею.
Когда Вы запускаете эмулятор терминала и получаете приглашение оболочки, или когда Вы запускаете оболочку явно, Вы получаете оболочку, которая не является оболочкой входа в систему. С тех пор ~/.profile
(или ~/.zprofile
) для команд, которые Вы хотите выполнить, когда Вы входите в систему, оболочка невхода в систему не читает этот файл. Вместо этого при запуске интерактивного zsh он читает ~/.zshrc
. (Чтения Zsh ~/.zshrc
во всех интерактивных оболочках, являются ли они оболочками входа в систему, не; удар, странно, никогда не читает ~/.bashrc
в оболочках входа в систему.)
Как правило, ~/.profile
содержит определения переменной среды и мог бы запустить некоторые программы, которые Вы хотите запустить однажды, когда Вы входите в систему или для целой сессии; ~/.zshrc
содержит вещи, которые должны быть сделаны для каждого экземпляра оболочки, такого как псевдоним и функциональные определения, настройки опции оболочки, настройки завершения, быстрые настройки, привязки клавиш, и т.д.
zsh документация, которую я имею на руке только, упоминает /etc/profile
и ~/.profile
поскольку вход в систему окружает в sh / ksh режим эмуляции.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
Оболочка входа в систему режима работы в собственной системе команд (argv [0] запускается с -
) не использует ~/.profile
(это будет использовать ~/.zprofile
хотя):
% zsh -c 'exec -a -zsh zsh' </dev/null
(никакой вывод)
sh / ksh оболочки входа в систему режима совместимости использует .profile:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...