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

4wk_ 21 unix bash 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选项不起作用)

chepner.. 32

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

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

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

read -p '^[[31mFoobar^[[0m: ' foo

  • @ 4wk_:将字符串分解为组件:`read -p $'\ e [31m'"$ bar"$'\ e [0m:'foo`,并在中间插入变量. (10认同)
  • 对; 如果`$"......"的工作方式相同,但是参数扩展会很好,但这实际上会有所不同.但是你可以使用`$'...'`和变量赋值:`red = $'\ e [31m'; NOCOLOR = $ '\ E [0米'; 读-p"$ {red} Foobar $ {nocolor}:"` (4认同)
  • 检查"QUOTING"部分末尾附近的手册页.[本页](http://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html#ANSI_002dC-Quoting)适用于`bash` 4.2,但此功能已稳定一段时间,所以它不应该与你使用的任何版本(很多)不同. (2认同)

Vrakfall.. 26

我有另一个解决方案,允许您使用变量来更改文本的格式.我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


Beggarman.. 18

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

  1. 使用echo -e -n显示提示
  2. 通过读取收集用户响应

例如:

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选项抑制尾随换行符.