Я использую тему/сценарии носатых цветов для одного из моих рабочих столов. Это - довольно удобный для пользователя путь, для начала носатый.
Можно использовать \b
или \r
положить обратно курсор и затем перезаписать печатный символ с новым символом. Отметьте это ни один \b
ни \r
удаляет печатные символы. Это просто кладет обратно курсор. \b
перемещается курсор поддерживают один символ и \r
перемещает курсор в начало строки.
Пример: оба
echo -e 'foooo\b\b\b\b\bbar'
и
echo -e 'foooo\rbar'
распечатает:
baroo
Если Вы хотите символы, удаленные затем, необходимо использовать следующее обходное решение:
echo -e 'fooooo\r \rbar'
вывод:
bar
Выборка от man echo
:
If -e is in effect, the following sequences are recognized:
\0NNN the character whose ASCII code is NNN (octal)
\\ backslash
\a alert (BEL)
\b backspace
\c produce no further output
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
NOTE: your shell may have its own version of echo, which usually super‐
sedes the version described here. Please refer to your shell's docu‐
mentation for details about the options it supports.
Вы ищете терминальные Escape. В частности, для очистки от позиции курсора до начала строки:
echo -e "\033[1K"
Или все на строке, независимо от позиции курсора:
echo -e "\033[2K"
И можно сделать все виды других аккуратных приемов с терминальными Escape также.
-e
как echo
аргументом не является POSIX, совместимый +, мне не нравятся escape-последовательности. Любой предпочитает printf
или tput
.
– LinuxSecurityFreak
03.02.2018, 12:23
Если Вы хотите очистить строку, то я предлагаю, чтобы Вы использовали комбинацию людей возврата каретки, упоминают и terminfo.
# terminfo clr_eol
ceol=$(tput el)
echo -ne "xyzzyxyzzy\r${ceol}foobar"
Это запишет xyzzyxyzzy
, затем возвратитесь к началу строки и отправьте "ясный концу строки" последовательность к терминалу, затем запишите foobar
. -n
заставляет эхо не добавить новую строку после foobar
.
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
для мобильности и постараться не иметь содержание $ceol
прохождение через \x
расширение.
– Stéphane Chazelas
08.11.2016, 11:49
Вы явно просите echo
, но этот запрос придавливает Вас. Вот подход, который использует встроенный удар printf
команда с расширением фигурной скобки:
printf 'fooooooooo' # 10 characters
printf '\r'; printf ' %0.s' {0..9} # 10 expansions of the space character
Вместо echo -en "\ r"
вы также можете найти полезной команду printf "\ r"
. Таким образом вы можете отформатировать строку. например:
for sec in {1..100}; do printf "\r %04d" ${sec}; sleep 0.1; done
Я обычно делаю это также при медленном синтаксическом анализе файлов, чтобы отобразить текущее имя файла без создания списка
Вот пример использования параметров echo без новой строки-n
и возврата каретки \r
.
#!/bin/bash
CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m"
echo -e "\n\e[4mDoing Things\e[0m"
echo -n "doing thing 1..."
sleep 1
echo -e "\\r${CHECK_MARK} thing 1 done"
echo -e 'fooooooooo\rbar
эхо barooooooo. – Mat 11.12.2011, 13:40echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
также эхоbaroo
. – lesmana 11.12.2011, 13:46printf
. – Michael-O 06.06.2013, 18:07