【问题标题】:basic shell commands extremely slow on Git-Bash, sh.exe but fine on Cygwin基本的 shell 命令在 Git-Bash 上非常慢,sh.exe 但在 Cygwin 上很好
【发布时间】:2023-02-17 07:02:55
【问题描述】:

当我运行pwdcd这样的基本命令时,命令本身执行速度很快,但控制台挂起 1 秒后才允许我执行另一个命令。

我得到了最新的 Git Bash 便携式并尝试了

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

但是Cygwin没有这个问题。
Cygwin 中,从与任何 Git Bash 变体相同的目录运行 pwd 结果同样快命令完成但也没有控制台挂起。

我的窗口是:Version 10.0.19044 Build 19044

我有nVidia Quadro P3000

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

从下面的 cmets 更新

$ 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

【问题讨论】:

  • 如果您的 git-bash 在 bash shell 中构建提示符,请仔细检查它是否工作正常。
  • git-bash 尝试获取当前的 git 分支并将其显示在提示符上。你能做PS1='$ '看看它是否有所改善吗?
  • 我知道。 Git-Bash 会尝试检测当前目录是否为 git 目录,即使它不是。所以现在你需要解决 Git-Bash 难以做到这一点的原因。
  • 我们看不到您的原始值 PS1。很明显,您已经配置了一个提示命令来执行一些需要时间的操作,但我们无法进一步帮助您。

标签: bash shell cygwin git-bash


【解决方案1】:

我认为 __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 等)。

【讨论】:

    【解决方案2】:

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

    set "GH=C:Program FilesGit"
    set "PATH=C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShell1.0"
    set "PATH=%GH%in;%GH%cmd;%GH%usrin;%GH%mingw64in;%GH%mingw64libexecgit-core;%PATH%"
    

    然后再试一次,输入bash进入shell会话。

    默认情况下,我得到:

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

    而且速度相当快。
    (微软 Windows 10.0.19044.1586,git 版本 2.35.1.windows.2)

    【讨论】:

    • 我用 PS1 的值更新了我的问题;我不碰它。估计是杀毒软件的问题。
    • @Bob 使用简化的路径是否更快?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        • 1970-01-01
        • 2017-08-19
        相关资源
        最近更新 更多