Есть ли лучший способ стереть строку, чем эхо ""? - PullRequest
2 голосов
/ 27 ноября 2009

Я хочу стереть несколько (скажем, 10) строк на экране, используя bash.

Я знаю, что это может быть сделано:

for x in `seq 1 10`; do
  echo "                                                    "
done

но должен быть лучший способ.

Что-то вроде:

echo -n10 --blank

или

echo -n10 space(80)

или что-то подобное.

Есть идеи?

Ответы [ 3 ]

5 голосов
/ 27 ноября 2009

Нет необходимости использовать seq в Bash:

for x in {1..10}
do
    dosomething
done

Допустим, вы хотите очистить 10 строк, начиная с 8-й строки на экране, вы можете использовать tput для перемещения курсораи выполните очистку:

tput cup 8 0        # move the cursor to line 8, column 0
for x in {1..10}
do
    tput el          # clear to the end of the line
    tput cud1        # move the cursor down
done
tput cup 8 0        # go back to line 8 ready to output something there

См. man 5 terminfo для получения дополнительной информации.

2 голосов
/ 17 декабря 2012

Вы можете использовать echo по-прежнему с выходами терминала:

ceol=$(tput el)
for x in `seq 10 -1 10`; do
   echo -n -e "\r${ceol}Counting $x"
   sleep 1
done

Или, если вы предпочитаете:

echo -n -e "\033[1K\rCounting $x"
  • -n не выводить \ n \ r в конце строки (поэтому курсор остается в конце последнего символа)
  • \r возврат к началу строки
  • ${ceol} очистить до конца строки (так идет после \r)
  • \033[1K очистить до начала строки (поэтому до \r)
* * Nb тысячу двадцать-три. сделал обратный отсчет, чтобы доказать, что линия очищена; то есть при печати 9 он показывает, что 0 из 10 был очищен.
1 голос
/ 27 ноября 2009

Попробуйте

$ printf "%80s" ""

, чтобы получить 80 пробелов, без завершающей строки. Если вы хотите узнать, сколько пробелов вам нужно, вероятно, вам нужно $ COLUMNS:

$ printf "%${COLUMNS}s" ""

даст вам пустую строку соответствующей длины, даже если вы изменили размер окна. Команда "clear" также очистит все окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...