基本的shell命令在Git-Bash、sh.exe上运行非常慢,但在Cygwin上运行良好

z31licg0  于 2023-02-19  发布在  Shell
关注(0)|答案(4)|浏览(260)

当我运行pwdcd这样的基本命令时,命令 * 本身 * 执行得很快,但控制台挂起了1秒钟,然后才允许我执行另一个命令。
我得到了最新的Git Bash便携式和尝试

  • 32位和64位
  • 以管理员身份运行
  • sh.exe而不是git-bash.exe(并以管理员身份运行)

但是Cygwin没有这个问题。
Cygwin中,从与任何Git Bash变体相同的目录运行pwd会同样快地完成 * 命令 *,而且不会出现控制台挂起。
我的Windows是:Version 10.0.19044 Build 19044
我有nVidia Quadro P3000

    • 根据以下评论进行更新**:

这似乎是我的Git安装的问题,但我选择了默认设置,所以我不知道它可能是什么。当我在Git-Bash中执行PS1='$ '时,我没有在每个命令执行后的1秒暂停。

    • 根据以下评论进行更新**
$ echo ${PS1@A}
declare -x PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]\n\[\033[32m\]\u@\h \[\033[35m\]$MSYSTEM \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ '

我什么都没改变。
我下载了一个版本的便携式Git For Windows,以管理员身份启动,然后键入lspwd等。
我回到2.24,但行为相同。
我也打算在我的个人电脑上试试,因为这可能是我的公司杀毒软件造成的。

    • 更新**

问题是__git_ps1,还有an open issue

bwntbbo3

bwntbbo31#

我认为__git_ps1是罪魁祸首。
作为测试,将以下代码放入/tmp/experiment.sh

if  [[ "$(type -t __git_ps1)" == 'function' ]]; then
  cd(){
    builtin cd "$@"
    __GIT_PS1=$('__git_ps1') # Calling original __git_ps1, only when changing directory.
  }
  __git_ps1_stub(){
    echo "$__GIT_PS1" # Now $PS1 will do this echo, instead of calling __git_ps1
  }
  alias __git_ps1=__git_ps1_stub # __git_ps1_stub will be called in $PS1
  cd . # Initialize $__GIT_PS1 for the first time.
fi

然后启动一个git-bash终端,并运行source /tmp/experiment.sh
如果情况有所改善,您可以将代码放入~/.bashrc中
如果您使用其他命令(如pushd、popd等)来更改目录,则需要更改这些命令。

toiithl6

toiithl62#

在测试Git bash时,首先尝试简化PATH。
在CMD中,键入

set "GH=C:\Program Files\Git"
set "PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0"
set "PATH=%GH%\bin;%GH%\cmd;%GH%\usr\bin;%GH%\mingw64\bin;%GH%\mingw64\libexec\git-core;%PATH%"

然后重试并键入bash以进入shell会话。
默认情况下,我得到:

$ echo $PS1
\[\033]0;$TITLEPREFIX:$PWD\007\]\n\[\033[32m\]\u@\h \[\033[35m\]$MSYSTEM \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$

而且相当快。
(微软 windows 操作系统10.0.19044.1586,git版本2.35.1)

rlcwz9us

rlcwz9us3#

这个问题可能与计算机网络名称解析速度慢有关。由于命令行中涉及计算机名称,我建议您将您的主机名和本地主机添加到etc/hostname中。

i2byvkas

i2byvkas4#

对我来说,这是损坏的页面文件。尝试清除Windows页面文件并重新启动。页面文件不断导致我的git bash挂起20秒,只有回车。我重新启用了几次页面文件,最终它再次发生。清除页面文件修复了每一次。我现在完全关闭页面文件,git bash尖叫快。

相关问题