Команда which никогда не была особенно быстрой, но поскольку я перешел на Windows 10, она работает крайне медленно. У меня есть общий .zshrc который я ношу с собой, поэтому он проверяет, доступны ли некоторые программы перед их настройкой. И первые несколько звонков занимают более 10 секунд.

Я использую ЗШ, которая , which встроены. Это может иметь значение, хотя определение which() { /usr/bin/which "%@" } , похоже, ничего не улучшит.

Примечание. У меня не подключены сетевые диски.

1 ответ1

1

Обходной и все вокруг лучше подход, учитывая то , что вы делаете в этом случае, чтобы избежать использования , which полностью, например , так:

if (( $+commands[foobar] ))
  # configure foobar
fi

Как это работает?

Из zshexpn(1):

$ {Имя} +

Если name является именем набора параметров, подставляется «1», в противном случае «0» подставляется.

$commands - это ассоциативный массив, которым управляет zsh (также встроенный hash ), состоящий из имен команд в качестве ключей и связанного с ними пути в качестве значения.

Таким образом, использование расширения ${+name} в хеш-таблице $commands , индексируемой командой, которую вы хотите проверить на наличие, дает вам дешевый и быстрый способ выполнить эту проверку.

И наконец, конструкция (( expr )) является арифметической оценкой, поскольку расширение ${+name} возвращает либо 0, либо 1.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .