You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重置tput文本装饰与颜色?解决Bash脚本终端残留设置问题

解决Bash脚本错误信息高亮后终端格式残留的问题

问题根源

你的代码仅设置了终端的加粗红色属性,却未在输出错误后重置这些格式,导致脚本退出后终端仍保持该状态。tput reset会重置整个终端(含清屏),不符合需求;子shell方案无效是因为终端属性是全局的,子shell内的格式修改仍会影响父终端,且你未在子shell内完成重置操作。

正确修复方案

方案1:输出后立即重置文本属性

使用tput sgr0(专门用于清除文本装饰与颜色,不会清屏)在输出错误后重置格式,再退出脚本:

error() {
    # 设置格式:加粗+红色
    tput -S <<END
bold
setaf 1
END
    # 输出错误到标准错误流
    echo "$1" 1>&2
    # 重置所有文本属性
    tput sgr0
    exit 1
}

方案2:子shell内完成完整格式周期

将格式设置、错误输出、属性重置全部放在子shell中执行,确保子shell结束前已恢复终端状态:

error() {
    (
        tput bold
        tput setaf 1
        echo "$1" 1>&2
        tput sgr0
    )
    exit 1
}

方案3:直接使用ANSI转义序列

如果你的终端支持ANSI转义(现代终端基本都支持),可以跳过tput,用转义序列直接控制格式:

error() {
    # \033[1;31m = 加粗红色,\033[0m = 重置格式
    echo -e "\033[1;31m$1\033[0m" 1>&2
    exit 1
}

关键提示

  • tput sgr0是仅重置文本格式的命令,和会清屏的tput reset完全不同
  • 无论采用哪种方案,必须保证重置操作在脚本退出前执行,避免终端残留异常格式

内容的提问来源于stack exchange,提问作者richbai90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:06:20