Заблокировать пользователя его домашней папкой

Вы правильно поняли.

emulate -R zsh сбрасывает все параметры на значения по умолчанию для zsh. Флаг -L делает это локальным для содержащей функции (и, в более общем случае, делает все изменения параметров локальными для функции).

Размещение emulate -LR zsh в начале определения функции является хорошей гигиеной, когда функция предназначена для использования в контекстах, где параметры потенциально различаются, особенно в интерактивных оболочках.

В данном конкретном случае emulate -LR zsh не требуется, поскольку на код не влияет ни один параметр. Но это не приносит никакого вреда.

Вот несколько примеров параметров, которые пользователь может установить в своем файле инициализации или которые могут быть отключены окружающим кодом, вызывающим функцию, и которые могут нарушить работу функции:

  • Отключение bare_glob_qual прерывает использование квалификаторов glob.
  • Отключение care_glob или case_match сделало бы сопоставление некоторых шаблонов нечувствительным к регистру, даже если это может не иметь смысла в функции.
  • null_glob и csh_null_glob влияют на поведение шаблонов подстановок, которые не соответствуют ни одному файлу.
  • numeric_glob_sort может нарушить работу функции, требующей развертывания шаблонов в лексикографическом порядке.
  • err_exit и unset могут вызывать ошибки, когда код функции предполагал поведение по умолчанию (игнорирование статуса команды, обработка неопределенной переменной как пустой).

1
19.09.2015, 00:03
0 ответов

Теги

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