Mac OSX Mavericks – ZSH не может выполнить ‘source ~/.zshrc’, слишком много открытых файлов.

Вопрос или проблема

Я не могу применить изменения в моем файле .zshrc (или в .bash_profile, если на то пошло), потому что я получаю такую ошибку, когда пробую:

/Users/ME/.zshrc:source:100: too many open files: /Users/ME/.zshrc

Я пробовал ulimit -n 10000, но это не работает. Я также пытался добавить файл launchd.conf (его там не было, пришлось создать его), чтобы навсегда изменить жесткие и мягкие ограничения числа файлов, но при перезагрузке мой терминал сразу же падает с сообщением Process Completed. (удаление файла launchd.conf и перезагрузка решают эту проблему).

Это может быть связано: по какой-то причине, моя переменная $PATH невероятно длинная, на тысячи символов. Есть много повторяющихся частей, например, вот часть того, что я получаю, если выполню echo $PATH:

/Applications/MAMP/bin/php/php5.4.10/bin:/Applications/MAMP/bin/php/php5.4.10/bin:/Applications/MAMP/bin/php/php5.4.10/bin:/Applications/MAMP/bin/php/php5.4.10/bin:/Applications/MAMP/bin/php/php5.4.10/bin........

Это продолжается сотни раз.

Это заставило меня подумать, что что-то в MAMP переписывает мою переменную $PATH снова и снова, что вызывает все мои другие проблемы, но я не могу найти, где это происходит, и не знаю, как это исправить.

Кто-нибудь сталкивался с этим раньше??

Вопросу уже десять лет, но эти симптомы легко воспроизвести, если в ~/.zshrc есть следующее:

path+=/Applications/MAMP/bin/php/php5.4.10/bin
source ~/.zshrc

Это предполагает, что что-то в цепочке стартовых файлов вызывает один из стартовых файлов.

Чтобы найти, что поломано в вашей переменной PATH, на Mavericks, вам нужно проверить эти файлы:

cat /etc/paths
ls -l /etc/paths.d/

(Я ставлю, что вы найдете что-то о MAMP!)

Я бы переместил все из /etc/paths.d/ в какое-нибудь безопасное место, перезагрузился и посмотрел, поможет ли это.

Если поможет (так как у вас могут быть пути и в других местах) – опубликуйте файлы из /etc/paths.d/ связанные с “MAMP”, и мы посмотрим.

.

Ответ или решение

Опыт общения с Mac OS X Mavericks и Zsh может оказаться ключевым в решении данной проблемы. Похоже, что проблема с ошибкой "слишком много открытых файлов" при выполнении команды source связана с неправильной конфигурацией переменной PATH.

Фон проблемы

Предположение верно: из-за многократного добавления одного и того же пути в PATH, количество срабатываний возрастает настолько, что приводит к превышению лимита на открытые файлы. Этот лимит контролируется системной утилитой ulimit, и временное его изменение через команду ulimit -n 10000 не решает проблему на постоянной основе.

Рекомендации по решению

  1. Диагностика источника проблемы:

    • Проверьте содержимое файла /etc/paths и директории /etc/paths.d/ на наличие записей, связанных с MAMP. Эти файлы и директории управляют системой, устанавливая глобальные пути в PATH.
    • Используйте команды:
      cat /etc/paths
      ls -l /etc/paths.d/
    • Если в них содержатся записи о MAMP, перенесите их во временное хранилище и перезагрузите систему. Это позволит определить, вызывают ли они проблему.
  2. Решение проблемы переполнения PATH:

    • Откройте ~/.zshrc и проверьте наложение команд, связанных с PATH. Особенно обратите внимание на строчку:
      path+=/Applications/MAMP/bin/php/php5.4.10/bin
      source ~/.zshrc
    • Такое дублирование может вызывать бесконечные циклы. Убедитесь в том, что source ~/.zshrc не вызывается рекурсивно непосредственно в процессе выполнения команд.
  3. Оптимизация конфигурации:

    • Упростите путь путем удаления повторяющихся комбинаций и корректировки порядка их вызова.
    • Конфигурация переменных окружения должна быть четко настроена, чтобы избежать избыточных операций и ошибок.
  4. Дополнительные меры:

    • Рассмотрите настройку логов для отслеживания загрузки терминала и перехвата точек входа в возможные циклы.

Заключение

Этот подход позволит избавиться от ошибки и стабилизировать работу вашего терминала в Mavericks. Следуя указанным шагам, вы устраните очевидные дублирования и циклы, что позволит проводить загрузку и исполнение конфигураций без избыточного потребления ресурсов. В случае обнаружения более сложных проблем, может потребоваться углубленное тестирование или консультация с профессионалом.

Оцените материал
Добавить комментарий

Капча загружается...