Это могло быть следствием выполнения некоторого кода, который уничтожает переменную FPATH
или fpath
. Проверьте значение любой из этих переменных; это должен быть список каталогов, в которые zsh загружает функции.
Переменные FPATH
и fpath
связаны (как PATH
и path
): изменение одного влияет на другое. Заглавная FPATH
- это строка, которая содержит список каталогов, разделенных двоеточиями. Строчная fpath
- это массив каталогов.
Проверьте свои сценарии запуска на наличие мест, где вы могли бы использовать любое из этих имен в качестве переменных. Проверьте список имен переменных set или , используемых zsh ( man zshparam
), и убедитесь, что вы не используете их для других целей.
Функции завершения загружаются автоматически, т. Е. Загружаются при первом использовании. После того, как вы выполнили какое-либо завершение в экземпляре оболочки, например, вы больше не должны видеть _main_complete: файл определения функции не найден
- если _main_complete
работает, но затем перестает работать с этим сообщением , происходит что-то более странное.
Каталог /etc/init.d/
не используется. Фактически используемым каталогом будет один из каталогов /etc/rc*.d
. Какой из них зависит от запуска -уровня вашей системы. Обычно вы запускаете на уровне запуска 5 /etc/rc5.d/
.
Поэтому, если вы хотите найти порядок, скрипты будут запускаться там. Порядок запуска этих сценариев зависит от имени символической ссылки, содержащейся в каталоге /etc/rc*.d
. Скрипты, начинающиеся с буквы S, выполняются, когда вы переходите на уровень выполнения (при загрузке ). Сценарии, начинающиеся с буквы D, выполняются, когда они покидают этот уровень выполнения (, например, :завершает работу ). Скрипты выполняются в порядке имен файлов. Вот почему символические ссылки в этих каталогах названы цифрами, чтобы расположить их в «правильном» порядке.
Такой краткий ответ... LC_COLLATE=C ls -l /etc/rc5.d
какой бы порядок они ни печатали, он и будет работать.