У 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' - тоже не представляю как можно тут применить.
команда clear очищает экран
как результат, вывод будет всегда с начала экранаи согласно ТЗ - всегда на одном месте.
> команда clear очищает экран
> как результат, вывод будет всегда с начала экрана
> и согласно ТЗ - всегда на одном месте.Спасибо за ответ, я рассмотрю clear, как вариант, если других вариантов не будет.
Но хотелось бы именно удалять уже напечатанное и печатать на том же месте, как это сделано с помощью echo в моем первом примере.
Может это возможно сделать как-то через параметры терминала или через /dev/stdout
В идеале вывод должен быть похож на команду top
>[оверквотинг удален]
> 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' - тоже не представляю как можно тут применить.
огромное спасибо!
решение: echo -e "\033[16A"
>[оверквотинг удален]
> 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-команды.