msys2 `which` очень медленно работает на windows 10

465
Jan Hudec

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

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

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

0

1 ответ на вопрос

1
ZeroKnight

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

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

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

От zshexpn(1):

$ +

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

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

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

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

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