URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9401
[ Назад ]

Исходное сообщение
"удалить (очистить) из stdout последние 15 строк"

Отправлено nastr , 03-Мрт-12 17:34 
У echo есть возможность удалять одну строку из stdout и получается, что если у меня команда выдает одну строку, то я могу делать вывод этой команды постоянно в одной строке, к примеру:
while true;do echo -en "`admin_powerpc -F 192.168.1.208:11 -Q|awk '{if(index($0,"BPS")){print $NF " Byte\t" $NF*8 " bits\t" $NF*8/1024 " Kbit\t" $NF*8/1024/1024 " Mbit"}}'`\r";sleep 5;done
получаю:
55392505 Byte   443140040 bits  432754 Kbit     422.611 Mbit

Вопрос:
если результат команды, не одна строка, а например 15, возможно ли каким-то образом удалить (очистить) из stdout последние 15 строк, что бы результат выполнения команды выводился на том же месте?
Пример:
while true; do echo -en "`admin_powerpc -F 192.168.1.202:11 -Q|tail -15`\r\r\r\r";sleep 3;done
Такой вариант удаляет только одну строку.
sed '1,10d' - тоже не представляю как можно тут применить.


Содержание

Сообщения в этом обсуждении
"удалить (очистить) из stdout последние 15 строк"
Отправлено ДорогойДрук , 03-Мрт-12 17:52 
команда clear очищает экран
как результат, вывод будет всегда с начала экрана

и согласно ТЗ - всегда на одном месте.


"удалить (очистить) из stdout последние 15 строк"
Отправлено nastr , 03-Мрт-12 17:56 
> команда clear очищает экран
> как результат, вывод будет всегда с начала экрана
> и согласно ТЗ - всегда на одном месте.

Спасибо за ответ, я рассмотрю clear, как вариант, если других вариантов не будет.
Но хотелось бы именно удалять уже напечатанное и печатать на том же месте, как это сделано с помощью echo в моем первом примере.
Может это возможно сделать как-то через параметры терминала или через /dev/stdout


"удалить (очистить) из stdout последние 15 строк"
Отправлено nastr , 03-Мрт-12 19:38 
В идеале вывод должен быть похож на команду top



"удалить (очистить) из stdout последние 15 строк"
Отправлено тень_pavel_simple , 04-Мрт-12 16:09 
>[оверквотинг удален]
>  422.611 Mbit
> Вопрос:
> если результат команды, не одна строка, а например 15, возможно ли каким-то
> образом удалить (очистить) из stdout последние 15 строк, что бы результат
> выполнения команды выводился на том же месте?
> Пример:
> while true; do echo -en "`admin_powerpc -F 192.168.1.202:11 -Q|tail -15`\r\r\r\r";sleep
> 3;done
> Такой вариант удаляет только одну строку.
> sed '1,10d' - тоже не представляю как можно тут применить.

http://lmgtfy.com/?q=linux+terminal+cursor+position+ansi


"удалить (очистить) из stdout последние 15 строк"
Отправлено nastr , 04-Мрт-12 19:50 
огромное спасибо!
решение: echo -e "\033[16A"

"удалить (очистить) из stdout последние 15 строк"
Отправлено LSTemp , 07-Мрт-12 06:28 
>[оверквотинг удален]
>  422.611 Mbit
> Вопрос:
> если результат команды, не одна строка, а например 15, возможно ли каким-то
> образом удалить (очистить) из stdout последние 15 строк, что бы результат
> выполнения команды выводился на том же месте?
> Пример:
> while true; do echo -en "`admin_powerpc -F 192.168.1.202:11 -Q|tail -15`\r\r\r\r";sleep
> 3;done
> Такой вариант удаляет только одну строку.
> sed '1,10d' - тоже не представляю как можно тут применить.

esc-команды.