Zsh, не совершающий нападки ~/.profile

Я только что установил zsh в своей системе Ubuntu. Кажется, что zsh не выполняет ~/.profile на init. К моему лучшему пониманию это должно быть автоматическим поведением. Что я пропускаю?

153
задан 12.09.2010, 10:20

2 ответа

.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 содержит вещи, которые должны быть сделаны для каждого экземпляра оболочки, такого как псевдоним и функциональные определения, настройки опции оболочки, настройки завершения, быстрые настройки, привязки клавиш, и т.д.

216
ответ дан 07.12.2019, 07:45

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...
1
ответ дан 07.12.2019, 07:45

Теги

Похожие вопросы