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

C语言实现:运行时根据程序输出修改已输入命令的颜色

让输入的命令根据执行输出自动变色

用Bash实现的具体步骤

1. 定义颜色转义码

在你的~/.bashrc中添加以下内容,预设好需要的颜色标识:

# 命令有输出时显示绿色
COLOR_HAS_OUTPUT='\033[32m'
# 命令无输出时显示红色
COLOR_NO_OUTPUT='\033[31m'
# 重置回终端默认颜色
COLOR_RESET='\033[0m'

2. 编写命令执行后的处理函数

这个函数会在每次命令执行完成后,回溯修改你刚输入的命令行颜色:

update_cmd_color() {
    # 获取最后执行的命令(剔除历史记录的行号前缀)
    last_cmd=$(history 1 | sed 's/^[0-9]*[[:space:]]*//')
    # 重新执行命令并捕获所有输出(包含标准输出和错误输出)
    cmd_output=$(eval "$last_cmd" 2>&1)
    
    # 移动光标回到命令输入行,清空原有内容
    tput cuu 1
    tput el
    
    # 根据输出是否为空,给命令添加对应颜色后重新打印
    if [ -n "$cmd_output" ]; then
        echo -e "${COLOR_HAS_OUTPUT}$last_cmd${COLOR_RESET}"
        # 重新输出命令执行结果
        echo "$cmd_output"
    else
        echo -e "${COLOR_NO_OUTPUT}$last_cmd${COLOR_RESET}"
    fi
    
    # 将光标移回提示符所在行
    tput cud 1
}

3. 绑定到命令执行钩子

让Bash每次执行完命令后自动触发上述函数,将以下内容加入~/.bashrc:

PROMPT_COMMAND="update_cmd_color; $PROMPT_COMMAND"

4. 使设置生效

执行source ~/.bashrc让配置立即生效,之后输入的命令就会根据是否有输出自动切换颜色。

注意事项

  • 该方案依赖终端对ANSI转义序列的支持,主流终端(如GNOME Terminal、iTerm2、Konsole)均兼容。
  • 对于后台执行的命令(结尾加&),可能无法实时捕获输出,需额外调整逻辑适配。
  • Zsh用户可将PROMPT_COMMAND替换为precmd函数,核心逻辑保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 05:32:45