Повторение вывода команды во FreeBSD

Автор: Dark

Как-то давно столкнулся с вопросом повторения, как в top(1), выводимой на экран информации. Ситуация заключалась в копировании на сервер файла, размером 5 Гб, и я, сидя за сервером, написал ls -lha /path/to/big_file, а потом, с определенной периодичностью, нажимал стрелочку "вверх" и enter. Через какое-то время утомился и решил поискать утилиту, которая бы делала эту работу за меня. И... не нашел. Наверное плохо искал, а, может быть, это и никому не надо было, ведь так просто сделать цикл самому. Для этих целей нам подойдут sh, bash и zsh. На остальных не пробовал.

$ while true ; do clear && ls -lha /path/to/big_file && sleep 1 ;done

По порядку:

while true ; do - начинаем бесконечный цикл, выйти из него можно по CTRL+C

clear - очищаем экран

ls -lha ... - это понятно, как раз то, что мы хотим регулярно видеть

sleep 1 - засыпаем на 1 секунду, кому надо дольше - подправит

;done - конец цикла

В csh или tcsh такая конструкция работать не будет из-за другого синтаксиса цикла.

Как обходное решение можно запускать такую конструкцию через sh, например так:

% sh -c 'while true ; do clear && ls -lha /path/to/big_file && sleep 1 ;done'

Так работать будет.

Ну а потом, как-то быстренько набросал себе скриптик для таких целей и назвал его redraw:

#!/bin/sh

if [ ! $@ ] ; then

echo "Usage: $0 <the commands you want to repeat>"

echo

exit 1

fi

while true

do

clear && $@ && printf " Press CTRL-C to exit " && sleep 1

done

Если есть желание - попробуйте.

$ sudo touch /usr/local/bin/redraw

$ sudo chmod a+x /usr/local/bin/redraw

Вносим в этот файл код приведенный выше, обновляем hash (rehash для csh или hash -r для bash) и запускам для проверки командой redraw date:

Чтв Мар 5 21:50:59 CET 2009

Press CTRL-C to exit

Получаем тикающие часики. Примерно то, что и было нужно.

Последнее изменение: пятница, 6 марта 2009 г. 00:05:16

http://www.ounix.ru/index.php?page=article&id=32

Обновлено: 12.03.2015