CentOS/Ubuntu Bash中如何区分命令输入与命令输出?
我之前在处理大量命令输出的时候也头疼过找不到输入的命令在哪,试了几个实用的方法,不管是CentOS还是Ubuntu的bash环境都能用,分享给你:
方法1:高亮你的命令输入(修改提示符)
最简单的方式是通过修改PS1环境变量,给命令输入区域设置和输出不同的颜色。比如把提示符设为绿色,输入的命令设为黄色:
# 临时生效,重启终端后失效 export PS1="\[\e[32m\]\u@\h:\w\$\[\e[33m\] "
\[\e[32m\]:开启绿色显示提示符\u@\h:\w\$:默认的提示符内容(用户名@主机名:当前路径$)\[\e[33m\]:切换到黄色,后续输入的命令都会是黄色- 输出会保持终端默认的白色,刚好和黄色的命令区分开
如果要永久生效,把上面的命令添加到你的~/.bashrc文件末尾,然后执行source ~/.bashrc即可。
方法2:给命令输出加缩进+高亮命令
如果输出内容特别多,缩进是最直观的区分方式。可以写一个简单的bash函数来包装命令:
# 把这个函数加到~/.bashrc里 run() { # 用红色高亮显示要执行的命令 echo -e "\e[31m$*\e[0m" # 执行命令,给输出每行加4个空格缩进 "$@" | sed 's/^/ /' }
用法示例:
run ls -l /etc
效果:红色的命令行,后面跟着缩进4格的输出,一眼就能分清哪行是你输入的命令,哪部分是输出。
方法3:给命令和输出设置不同颜色
如果喜欢用颜色区分,可以让命令和输出各用一种颜色,比如命令用蓝色,输出用青色:
# 同样加到~/.bashrc color_run() { echo -e "\e[34m执行命令: $*\e[0m" "$@" | awk '{print "\033[36m" $0 "\033[0m"}' }
这样执行color_run df -h时,命令行会是蓝色,所有输出内容都是青色,和默认的终端文字完全区分开。
方法4:自动高亮所有命令(进阶玩法)
如果不想每次都敲函数前缀,可以用bash的DEBUG陷阱,自动在执行每个命令前高亮打印命令:
# 临时生效,永久生效就加到~/.bashrc trap 'echo -e "\e[35m> $BASH_COMMAND\e[0m"' DEBUG
这个陷阱会在每个命令执行前,用紫色打印出命令内容(带>前缀),然后再执行命令输出结果。如果觉得内部命令(比如cd、echo)也被高亮太烦,可以加个过滤:
trap '[[ ! $BASH_COMMAND =~ ^(cd|echo|pwd)$ ]] && echo -e "\e[35m> $BASH_COMMAND\e[0m"' DEBUG
这样就只会高亮外部命令,内部命令不会额外打印。
小补充:ANSI颜色码参考
常用的前景色码:
- 30: 黑色
- 31: 红色
- 32: 绿色
- 33: 黄色
- 34: 蓝色
- 35: 紫色
- 36: 青色
- 37: 白色
- 0: 重置颜色(回到终端默认)
你可以根据自己的喜好调整颜色组合~
内容的提问来源于stack exchange,提问作者WesternGun
相关产品推荐
相关产品推荐

