tput在MinTTY(Git-Bash)上非常慢



Git Bash总体上相当缓慢(相比之下,WSL/Ubuntu下的平均运行时间为1.082秒,MinTTY下为4.460秒)。我已经将1.479缩小到以下代码块:

# Determine if this terminal supports colors
if test -t 1; then
if [[ -n "$(tput colors)" ]] && [[ "$(tput colors)" -ge 8 ]]; then
MY_APP_FMT_SUPPORTED=true
MY_APP_FMT_BOLD="$(tput bold)"
MY_APP_FMT_UNDERLINE="$(tput smul)"
MY_APP_FMT_INVERSE="$(tput smso)"
MY_APP_FMT_BLACK="$(tput setaf 0)"
MY_APP_FMT_RED="$(tput setaf 1)"
MY_APP_FMT_GREEN="$(tput setaf 2)"
MY_APP_FMT_YELLOW="$(tput setaf 3)"
MY_APP_FMT_BLUE="$(tput setaf 4)"
MY_APP_FMT_MAGENTA="$(tput setaf 5)"
MY_APP_FMT_CYAN="$(tput setaf 6)"
MY_APP_FMT_WHITE="$(tput setaf 7)"
MY_APP_FMT_CODE=$MY_APP_FMT_CYAN
# placing it down below so that option -x doesn't cause bad highlighting
# to persist
MY_APP_FMT_CLEAR="$(tput sgr0)"
fi
fi

鉴于我对*nix工具在Windows上的性能的了解,我怀疑速度放缓是由于所有的子shell。

  • 这些子外壳是否应该解释整个减速?如果没有,我需要继续研究为什么GitBash仍然迟缓
  • 在保持终端兼容性的同时,是否有更高性能的方法可以做到这一点

您可以使用-S选项对tput调用进行分组:

#!/usr/bin/env bash
tkeys=(bold smul "setaf 0" "setaf 1") # You can add the rest
tvalues_s=$(tput -S < <(printf "%sn" "${tkeys[@]}"))
declare -a tvalues=( ${tvalues_s//$'e'/ $'e'} )
declare -p tvalues

现在您在tvalues中有了值,可以将其分配给MY_APP_FMT_。。。

相关内容

  • 没有找到相关文章