msys2 `which` ist unter Windows 10 sehr langsam

514
Jan Hudec

Der whichBefehl war nie besonders schnell, aber seit ich auf Windows 10 umgestiegen bin, ist er extrem langsam. Ich habe ein generisches Produkt .zshrc, das ich herumtrage, also teste ich, ob einige Programme verfügbar sind, bevor sie konfiguriert werden. Und die ersten Anrufe dauern über 10 Sekunden.

Ich verwende zsh, das whicheingebaut ist. Das kann einen Unterschied machen, obwohl das Definieren which() { /usr/bin/which "%@" }anscheinend nichts zu verbessern scheint.

Hinweis: Ich habe keine Netzlaufwerke installiert.

0

1 Antwort auf die Frage

1
ZeroKnight

Eine Problemumgehung und ein insgesamt angenehmerer Ansatz ist, wenn man das, was Sie in diesem Fall tun, whichvöllig auf die Verwendung verzichtet.

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

Wie funktioniert es?

Von zshexpn(1):

$ {+ name}

Wenn name der Name eines Parameters ist, wird '1' ersetzt, andernfalls '0'.

$commandsist ein assoziatives Array, das von zsh (auch dem hashBuiltin) verwaltet wird und aus Befehlsnamen als Schlüssel und dem zugehörigen Pfad als Wert besteht.

Wenn Sie die ${+name}Erweiterung für die $commandsHashtabelle verwenden, die durch den Befehl indiziert wird, dessen Existenz Sie testen möchten, erhalten Sie eine kostengünstige und schnelle Möglichkeit, diese Überprüfung durchzuführen.

Schließlich ist das (( expr ))Konstrukt eine arithematische Bewertung, da die ${+name}Erweiterung entweder 0 oder 1 zurückgibt.