MinTTY 上的 tput 非常慢 (Git Bash)
tput is very slow on 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。
- 这些子 shell 应该 解释整个减速过程吗?如果没有,我将需要继续研究为什么 Git Bash 仍然缓慢。
- 有没有更高效的方法来做到这一点,同时保持终端兼容性?
您可以使用 -S
选项对 tput 调用进行分组:
#!/usr/bin/env bash
tkeys=(bold smul "setaf 0" "setaf 1") # You can add the rest
tvalues_s=$(tput -S < <(printf "%s\n" "${tkeys[@]}"))
declare -a tvalues=( ${tvalues_s//$'\e'/ $'\e'} )
declare -p tvalues
现在您在 tvalues
中有了值,您可以将其分配给 MY_APP_FMT_...
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。
- 这些子 shell 应该 解释整个减速过程吗?如果没有,我将需要继续研究为什么 Git Bash 仍然缓慢。
- 有没有更高效的方法来做到这一点,同时保持终端兼容性?
您可以使用 -S
选项对 tput 调用进行分组:
#!/usr/bin/env bash
tkeys=(bold smul "setaf 0" "setaf 1") # You can add the rest
tvalues_s=$(tput -S < <(printf "%s\n" "${tkeys[@]}"))
declare -a tvalues=( ${tvalues_s//$'\e'/ $'\e'} )
declare -p tvalues
现在您在 tvalues
中有了值,您可以将其分配给 MY_APP_FMT_...