path_helper и zsh

Что относительно простой символьной ссылки?

ln -s /etc/profile /etc/zsh/zprofile

Можно также добавить что-то вроде этого при необходимости в некоторой условной инициализации:

#Determine our shell without using $SHELL, which may lie
shell="sh"
if test -f /proc/mounts; then
   case $(/bin/ls -l /proc/$$/exe) in
        *bash) shell=bash ;;
        *dash) shell=dash ;;
        *ash)  shell=ash ;;
        *ksh)  shell=ksh ;;
        *zsh)  shell=zsh ;;
    esac
fi
6
12.06.2012, 01:41
2 ответа

Вы видели это, superuser.com по подобной проблеме? Связанное сообщение в блоге говорит (и я цитирую почти полное сообщение):

/usr/libexec/path_helper, то, которое Mac OS X выполняет каждый раз, когда оболочка входа в систему создается, действительно медленно. (В частности, я думаю, что замедление находится в [[ "$NEWPATH" = *(*:)${p}*(:*) ]].) Мои Окна терминала занимали приблизительно четыре секунды для открытия. Путем удаления файлов в/etc/paths.d и помещения их содержания непосредственно в мой $PATH в .bash_profile, Окна терминала теперь загружаются немедленно.

Обсуждение также включает ссылку на замену, записанную в Perl, github.com/mgprot/path_helper (никакая идея о ее скорости, tho).

Править: Из комментариев вышеупомянутого сообщения в блоге - патч к path_helper это должно быть другим способом устранить проблему.

4
27.01.2020, 20:26
  • 1
    Спасибо за Ваш ответ! AFAIK, path_helper в моей системе является фактическим универсальным двоичным файлом (для i386 и x64_86 архитектуры). Таким образом, я не уверен, что патч поможет мне. Хотя теперь, по крайней мере, я достаточно уверен удалить все файлы из/etc/paths.d/ –  Eimantas 20.10.2011, 15:56
  • 2
    , я только что удалил все файлы из/etc/paths.d/, и терминал запускается немедленно (после того, как, перезагружая для обеспечения теплого запуска)! –  Eimantas 20.10.2011, 15:59

Я знаю то, что следует, не оказывает влияния на скорость запуска нового терминала. Однако это укусило меня так, я думал, что вставил свои два цента.

Я думаю, что на самом деле сомнительно, что этот вызов (к path_helper) находится в zshenv (который называют для всех оболочек, не только входят в оболочки). Для других оболочек вызов path_helper находится вместо этого в/etc/profile или в/etc/csh.login - которые называют только для оболочек входа в систему.

Это становится проблемой при выполнении 'экранной' утилиты под zsh. 'экран' не запустит оболочку входа в систему, но скорее наследует среду от оболочки вызова. Но это все еще назовет/etc/zshenv и bu расширение path_helper.

Как это происходит, path_helper не только захватит кандидатов ПУТИ от/etc/paths.d, но если будет существующий ПУТЬ, когда это назовут, это будет активно управлять этим ПУТЕМ - это разделит компоненты, которые это нашло в/etc/paths и/etc/paths.d, и предварительно ожидайте их. Таким образом при помещении $ {ПОЛЬЗОВАТЕЛЬ} / мусорное ведро или/usr/local/bin во главе ПУТИ (потому что Вы хотите, чтобы Ваши собственные программы были найдены первыми), затем, это не будет работать в 'экранной' сессии.

Мое предложенное исправление к моей собственной проблеме должно переименовать/etc/zshenv к (в настоящее время не существующему)/etc/zprofile, но я волнуюсь, что это окажет вредные воздействия... могла бы быть причина, почему zsh реализация на OS X имеет этот вызов в/etc/zshenv, и это будет наверняка повреждено, когда следующая ОС выйдет, и я забуду все о своей фиксации.

Кто-либо еще замеченный это? Или имеют какие-либо мысли?

4
27.01.2020, 20:26
  • 1
    , я не уверен, что Вы правы относительно PATH быть управляемым. Я думаю, что всегда мог поместить то, во главе чего я хочу PATH. С другой стороны я обычно выполняю в этом мой .zshrc файл, после path_helper уже сделал свою работу. –  Marnen Laibow-Koser 23.02.2015, 23:28
  • 2
    @MarnenLaibow-Koser, я знаю этот ответ, является древним, но кажется этим в El Capitan OSX вызов к path_helper был перемещен от /etc/zshenv кому: /etc/zprofile –  shadowtalker 25.05.2016, 20:00
  • 3
    Да, это - чрезвычайно глупая вещь сделать. Потерянный бесчисленный из часов, отлаживая, почему make-файл не работает, когда zsh используется в качестве оболочки?! Угадайте то, что - всегда сбрасывался ПУТЬ так, чтобы команды выполнялись от неправильных местоположений. Если у Вас есть эта часть... в zshenv лучше удалить его как можно скорее и/или переместиться в /etc/zprofile. –  Antti Haapala 06.11.2017, 19:22

Теги

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