在linux终端输出彩色命令后,我的命令行变色

时间:2016-01-31 14:45:17

标签: linux bash shell ping

我希望使用shell脚本输出彩色ping命令。但是在这个过程中,我的命令行也变成了颜色。有什么办法可以让我的输出变成彩色吗?

这是我的bash脚本:

#!/bin/bash
num=1
for((i=1; i <= "$1"; i++))
do
    echo "$(tput setaf "$num")Hello $i"
    ((num=num + 1))
done

请参阅此示例:

this

1 个答案:

答案 0 :(得分:6)

设置后需要重置颜色。使用tput,可以使用tput sgr0(删除所有属性)来完成。例如:

#!/bin/bash
num=1
for((i=1; i <= "$1"; i++))
do
echo "$(tput setaf "$num")Hello $i$(tput sgr0)"
((num=num + 1))
done

将颜色设置视为标记,终端仿真器显示标记的文本。它无法知道程序输出的开始和结束位置,因为它接收的是连续的文本流(以及“标记”的控制代码)。根据您的提示配置(请参阅echo $PS1),您的提示可能有也可能没有标记来设置颜色。如果没有,则没有任何内容覆盖程序输出给出的颜色标记,因此,提示会获得程序最后设置的颜色。

(注意:我的bash不支持你在for循环条件下使用的任何语法。我只是更改了相关部分。)