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
相关产品推荐
相关产品推荐

