Команда чтения: отображение приглашения в цвете (или включение интерпретации обратных слэшей)
Я часто использую что-то вроде 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
? (ничего в man-странице:(-r
опция не работает)
Ответы
Ответ 1
read
не будет обрабатывать какие-либо специальные escape-последовательности в аргументе -p
, поэтому вам нужно будет указать их буквально. bash
Для этого полезны строки с кодами ANSI:
read -p $'\e[31mFoobar\e[0m: ' foo
Вы также должны иметь возможность ввести буквенный escape-символ с Control - v Escape, который будет отображаться как ^[
в терминале:
read -p '^[[31mFoobar^[[0m: ' foo
Ответ 2
Разделите запрос на два компонента:
- используйте echo -e -n для отображения приглашения
- получить ответ пользователя с помощью
например:
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
У меня есть другое решение, которое позволяет использовать переменные для изменения текстового формата. я 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
Ответ 4
эта работа для меня:
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