Вопрос или проблема
Я не могу применить изменения в моем файле .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
не решает проблему на постоянной основе.
Рекомендации по решению
-
Диагностика источника проблемы:
- Проверьте содержимое файла
/etc/paths
и директории/etc/paths.d/
на наличие записей, связанных с MAMP. Эти файлы и директории управляют системой, устанавливая глобальные пути вPATH
. - Используйте команды:
cat /etc/paths ls -l /etc/paths.d/
- Если в них содержатся записи о MAMP, перенесите их во временное хранилище и перезагрузите систему. Это позволит определить, вызывают ли они проблему.
- Проверьте содержимое файла
-
Решение проблемы переполнения PATH:
- Откройте
~/.zshrc
и проверьте наложение команд, связанных сPATH
. Особенно обратите внимание на строчку:path+=/Applications/MAMP/bin/php/php5.4.10/bin source ~/.zshrc
- Такое дублирование может вызывать бесконечные циклы. Убедитесь в том, что
source ~/.zshrc
не вызывается рекурсивно непосредственно в процессе выполнения команд.
- Откройте
-
Оптимизация конфигурации:
- Упростите путь путем удаления повторяющихся комбинаций и корректировки порядка их вызова.
- Конфигурация переменных окружения должна быть четко настроена, чтобы избежать избыточных операций и ошибок.
-
Дополнительные меры:
- Рассмотрите настройку логов для отслеживания загрузки терминала и перехвата точек входа в возможные циклы.
Заключение
Этот подход позволит избавиться от ошибки и стабилизировать работу вашего терминала в Mavericks. Следуя указанным шагам, вы устраните очевидные дублирования и циклы, что позволит проводить загрузку и исполнение конфигураций без избыточного потребления ресурсов. В случае обнаружения более сложных проблем, может потребоваться углубленное тестирование или консультация с профессионалом.