Почему «which -a» показывает несколько (одинаковых) записей в Git Bash для Windows?

#windows #environment-variables #git-bash #git-for-windows

Вопрос:

Вывод which -a команд:

 $ which -a grep
/usr/bin/grep
/bin/grep
/usr/bin/grep
/c/_Apps/bin/grep
/usr/bin/grep

$ which -a which
/usr/bin/which
/bin/which
/usr/bin/which
/usr/bin/which
 

Тот /usr/bin/xxx появляется трижды.

Эквивалентная where команда Windows показывает уникальные записи:

 $ where grep
D:_AppsGitusrbingrep.exe
C:_Appsbingrep.exe

$ where which
D:_AppsGitusrbinwhich.exe
 

Версия Git

 $ git --version
git version 2.33.0.windows.2
 

Записи в PATH переменной среды (связанные с Git):

  • D:_AppsGitmingw64bin
  • D:_AppsGitusrbin
  • D:_AppsGit

Примечания:

  • Причина, по которой первая команда grep показывает дополнительную запись ( /c/_Apps/bin/grep ), заключается в том, что у меня grep хранится отдельный исполняемый файл (вместе с sed и wget ).
  • Я использую портативную версию Git для Windows
  • Я попытался поискать в Google "git bash" "which" command shows multiple entries /usr/bin , но не смог найти никаких результатов (отсканировал только первые несколько записей).

Примечание по теме: Я предполагаю, что именно поэтому многие базовые команды Git в моей системе работают медленно. Даже git log или git status занимает несколько секунд каждый раз, когда они запускаются. Я попробовал предложения по этому поводу из других сообщений SO, включая обновление Git. Ни один из них до сих пор не сработал.

Комментарии:

1. Находится /usr/bin в $PATH несколько раз в первой системе?

2. встроенная type команда bash ( help type для получения дополнительной информации), скорее всего, будет быстрее, чем which и предоставит вам лучшую информацию.

3. Вероятно, не поэтому команды Git работают медленно, так как оболочка прекращает поиск, когда находит первый элемент. Медлительность, скорее всего, вызвана не используемым по умолчанию антивирусом, брандмауэром или программным обеспечением безопасности.

4. Обратите внимание, что «git bash» — это неправильное название: bash-это «оболочка» (интерпретатор командной строки). Bash изначально был написан для систем Unix/Linux. Git нужна оболочка, совместимая с POSIX, и для этого достаточно bash. Поэтому, чтобы заставить Git работать в Windows, кто-то перенес bash в Windows. Эта программа (bash-для-Windows) теперь поставляется в комплекте с Git-для-Windows. Люди называют это «git bash», но на самом деле это просто bash для Windows. Вам не нужно иметь Git, чтобы использовать его.

5. Оболочки Unix действительно хорошо работают в системах Unix/Linux и гораздо хуже в Windows (по многим причинам), но они не должны быть болезненно медленными на современном оборудовании. Как предполагает bk2204, вероятно, происходит что-то еще, что замедляет его.