Ответы:
.profile против .zprofileZsh не запускается ~/.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-сессии (хороший test - это имя родительского процесса, полученное с помощью ps -o comm= $PPID: если это sshdили su, то это безопасно exec).
Самое простое решение как для работы с zsh, так и для запуска ~/.profile- создать режим, ~/.zprofileкоторый входит в режим эмуляции sh во время работы ~/.profile:
emulate sh
. ~/.profile
emulate zsh
Если у вас достаточно свежая версия zsh (в Ubuntu, я думаю, это означает, что начиная с lucid), вы можете упростить это до emulate sh -c '. ~/.profile'.
.zprofile против .zshrcФайл ~/.profileзагружается оболочкой входа в систему . Оболочка входа - это первый процесс, который запускается при входе в систему в текстовом режиме, например в текстовой консоли или через ssh. По умолчанию на большинстве компьютеров Linux оболочкой входа является bash, но вы можете изменить ее с помощью chshкоманды или с помощью другого инструмента, такого как «Настройки пользователя» в Ubuntu. Когда это оболочка входа в систему, bash читает, ~/.bash_profileесли она существует ~/.profile, а zsh - только чтение ~/.zprofile(поскольку ее синтаксис не полностью совместим с традиционным sh). В большинстве конфигураций ~/.profileтакже загружается сценариями запуска сеанса X при входе в диспетчер графического отображения.
Когда вы запускаете эмулятор терминала и получаете приглашение оболочки, или когда вы запускаете оболочку явно, вы получаете оболочку, которая не является оболочкой входа в систему. Поскольку ~/.profile(или ~/.zprofile) для команд, которые вы хотите выполнить при входе в систему, оболочка, не входящая в систему, не читает этот файл. Вместо этого, когда вы запускаете интерактивный Zsh, он читает ~/.zshrc. (Zsh читает ~/.zshrcво всех интерактивных оболочках, независимо от того, являются ли они оболочками для входа; bash, как ни странно, никогда не читает ~/.bashrcв оболочках для входа.)
Как правило, ~/.profileсодержит определения переменных среды и может запускать некоторые программы, которые вы хотите запустить один раз при входе в систему или для всего сеанса; ~/.zshrcсодержит действия, которые необходимо выполнить для каждого экземпляра оболочки, такие как определения псевдонимов и функций, настройки параметров оболочки, настройки завершения, настройки подсказок, привязки клавиш и т. д.
~/.profileне загружается zshпри входе в систему.zshзагружается ~/.zprofileпри входе в систему.zshзагружается ~/.zshrcпри запуске нового терминального сеанса.Нужна дополнительная информация? Посмотрите на превосходный ответ Жиля!
В дополнение к ответу Жиля, с относительно свежей версией zsh вы можете сделать это:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... Который будет источником файла .profile с действующим sh-режимом zsh. И это только активно во время источника. Таким образом, вам не нужно сохранять текущее состояние параметра, чтобы повторно воспроизвести его после поиска.
Я .zprofileсовместим с .profile(содержит только изменения PATH), поэтому требуется только:
ln -s .profile .zprofile
ЗШ документация у меня на руках только упоминает /etc/profileи ~/.profileдля оболочек входа в ш / КШ режиме совместимости.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
Оболочка входа в основной режим (argv [0] начинается с -) не использует ~/.profile( ~/.zprofileхотя будет использовать ):
% zsh -c 'exec -a -zsh zsh' </dev/null
(нет выхода)
ш / КШ СОВМЕСТИМОСТЬ режим входа оболочки использует .profile:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...