4wk*_*wk_ 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";
Run Code Online (Sandbox Code Playgroud)
我正在使用xterm.
在man echo,它说:
-e启用反斜杠转义的解释
有没有办法用read命令做同样的事情?(手册页中没有任何内容:( -r选项不起作用)
che*_*ner 32
read将不会处理参数中的任何特殊转义-p,因此您需要按字面指定它们.bashANSI引用的字符串对此有用:
read -p $'\e[31mFoobar\e[0m: ' foo
Run Code Online (Sandbox Code Playgroud)
您还应该能够使用Control- 键入一个文字转义字符v Escape,它将显示^[在终端中:
read -p '^[[31mFoobar^[[0m: ' foo
Run Code Online (Sandbox Code Playgroud)
Vra*_*all 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
Run Code Online (Sandbox Code Playgroud)
Beg*_*man 18
将您的查询分为两个组成部分:
例如:
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
Run Code Online (Sandbox Code Playgroud)
echo -n选项抑制尾随换行符.
这对我有用:
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
Run Code Online (Sandbox Code Playgroud)
更多例子,见展示案例,链接是:
| 归档时间: |
|
| 查看次数: |
16273 次 |
| 最近记录: |