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

我经常使用像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选项不起作用)

read不会在-p参数中处理任何特殊的转义,所以你需要从字面上指定它们。 bash的ANSI引用的字符串对此有用:

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

您还应该能够使用Controlv Escape键入文字转义字符,该字符将显示为^[在终端中:

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

把你的查询分解成两个组件:

  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选项禁止尾随的换行符。

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

这是一个例子:

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

这个工作对我来说:

  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 

结果如下: 在这里输入图像说明

更多的例子,看看案例,链接是:

mysqlis