我经常使用类似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
选项不起作用)
答案 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)
将您的查询分为两个部分:
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
更多示例,请参阅展示案例,链接是: