读命令:以彩色显示提示(或启用反斜杠转义的解释)

时间:2014-07-28 15:15:19

标签: bash unix terminal

我经常使用类似read -e -p "> All good ? (y/n)" -n 1 confirm;的内容向用户询问确认。

我正在寻找一种颜色化输出的方法,正如命令echo -e所做的那样:

echo -e "\033[31m";
echo "Foobar";       // will be displayed in red
echo -e "\033[00m";

我正在使用xterm。

man echo中,它说:

  

-e启用反斜杠转义的解释

有没有办法用read命令做同样的事情? (手册页中没有任何内容:( -r选项不起作用)

4 个答案:

答案 0 :(得分:30)

read将不会处理-p的参数中的任何特殊转义,因此您需要按字面指定它们。 bash的ANSI引用字符串对此非常有用:

read -p $'\e[31mFoobar\e[0m: ' foo

您还应该能够使用 Control - v Escape 键入一个文字转义字符,它将显示为{{1}在终端:

^[

答案 1 :(得分:18)

我有另一个解决方案,允许您使用变量来更改文本的格式。我echo -e我想要的输出到-p命令的read参数。

以下是一个例子:

RESET="\033[0m"
BOLD="\033[1m"
YELLOW="\033[38;5;11m"
read -p "$(echo -e $BOLD$YELLOW"foo bar "$RESET)" INPUT_VARIABLE

答案 2 :(得分:16)

将您的查询分为两个部分:

  1. 使用echo -e -n显示提示
  2. 使用阅读
  3. 收集用户响应

    e.g:

    echo -e -n "\e[0;31mAll good (y/n)? "   # Display prompt in red
    echo -e -n '\e[0;0m'                    # Turn off coloured output
    read                                    # Collect the user input
    

    echo -n 选项会抑制尾随换行符。

答案 3 :(得分:3)

这项工作对我来说:

    BC=$'\e[4m'
    EC=$'\e[0m'

    while true; do
            read -p "Do you wish to copy table from ${BC}$HOST $PORT${EC} to ${BC}$LOCAL_HOST $LOCAL_PORT${EC}? (y or n)" yn
        case $yn in
        ....
    done

结果如下: enter image description here

  

更多示例,请参阅展示案例,链接是:

mysqlis