如何去除印刷品上的颜色以使其适合滚边

如何去除印刷品上的颜色以使其适合滚边

我正在用我自己的脚本传输一些 Unix 命令。问题是在我的脚本中,我使用了颜色。例如:

yellow=`tput setaf 3`
reset=`tput sgr0`

function Warning()
{
    echo "${yellow}$*${reset}"
}

我有一个命令可以使用Warning "Compress $directory".

我想将它输入到 find 命令中。

我在用着:

./compress.sh | grep Push | awk '{print $2}' | while read directory; do find $directory | wc -l; done;

但是,我收到此错误:

find: '/some_directory\033(B\033[m': 没有这样的文件或目录 0

看起来要么是awk在打印的末尾添加了一些看不见的字符,要么是颜色与滚边混淆了。

为什么我会收到此错误?我应该怎么办?

答案1

终端颜色通过转义序列起作用。${yellow}确实是\033[0;33m(或\e[0;33m)并且${reset}\033[0m。你可以尝试一下echo -e '\e[0;33m yellow \e[0m'基本颜色代码列表)。

\033表示八进制数 033 的字符,即 ASCII 和 Unicode 中的 Escape。\e是逃脱的另一种方式。标记[代码的开始,m标记代码的结束。

大多数程序无法解释颜色代码,因此如果您正在使用管道,则必须禁用它们。你可以检测你的程序是否在管道中运行,当[[ -t 1 ]]为真时,您正在向终端写入内容,如果为假,则您正在向其他地方写入内容,可能是管道。

当您打印到终端时,这只会输出颜色:

yellow=''
reset=''
if [[ -t 1 ]]; then
    yellow=`tput setaf 3`
    reset=`tput sgr0`
fi

function Warning()
{
    echo "${yellow}$*${reset}"
}

相关内容