Есть ли способ сделать так, чтобы отображаемый контент исчезал сразу после ввода данных пользователем?
Например, возьмите этот файл ниже
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Если вы запустите это, вывод
how are you ? yHave fun
Я ищу что-то, что позволяет мне how are you ?
исчезнуть, как только пользователь нажимает клавишу
А затем после исчезновения распечатать Have fun
Итак, я хочу, чтобы последний вывод вышеуказанной программы был только
Have fun
Примечание. Кроме того, все, что находится над этим сценарием и напечатано на экране оболочки, стирать не следует.
я использую bash
clear
междуecho
S не вариант?clear
очистит вывод, который уже напечатан выше на экране, если таковой имеется. @sebasthAre you fine
берутся? Не должно ли это бытьHow are you
?Ответы:
Ты можешь использовать:
(или
printf '\r'
), чтобы переместить курсор в начало строки. С последующим:удалить все до конца строки. (
tcsh
аzsh
также естьechotc
встроенный модуль, который вы можете использовать сtermcap
эквивалентом этогоterminfo
el
:echotc ce
(такжеechoti el
вzsh
))источник
Используйте возврат каретки (
\r
). Этот специальный символ (оставшийся со времен механических пишущих машинок) переместит курсор назад к началу строки. Затем вам нужно столько пробелов, сколько и сообщения, которое вы хотите удалить (это перезапишет сообщение), а затем второй возврат каретки, чтобы вернуться в начало перед печатью следующего сообщения. Что-то вроде этого:Выполнение скрипта выше печатает:
источник
\r
вы можете поставить все пробелы между\rHave fun
и\n
.Есть несколько способов сделать это, от идиотского до элегантного.
Самый надежный метод (хотя и большая часть работы) - это обратный пробел, повторение которого повторяется столько раз, сколько необходимо. Это работает на всех, кроме телетайпов (удаление чернил с бумаги является сложной задачей).
Следующим шагом по шкале является возврат каретки, возврат каретки. Это не работает с эмуляторами терминала, которые вставляют перевод строки до или после каждого возврата каретки (это опция minicom, и другие могут быть настроены на это).
Далее следуют специальные приемы для терминала. Я упомяну только коды возможностей termcap, поскольку базы данных termcap и terminfo могут показывать использование. (Вот список.)
Простым для отдельной строки является перемещение в столбец (ch), за которым следует очистка до конца строки (ce).
Для более сложных случаев, включая многострочные ответы, есть сохранение абсолютной позиции (sc), подсказка, ответ чтения, восстановление позиции курсора (rc), очистка до конца экрана (cd).
В большинстве случаев вы можете жестко закодировать значения vt100 для последних двух ответов, так как большинство эмуляторов терминала совместимы с ним. Конечно, не все терминалы поддерживают эти опции, но те, которые не являются редкими и устаревшими.
источник