[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Нужен ли bash



AP> В сообщении от Wednesday 24 September 2008 13:26:14 Dmitry E. Oboukhov
AP> написал(а):
AP>> например файловые операции на шелле всегда делаются проще
AP>> 
AP>> grep bla-bla file.txt|awk bla-bla|filter bla-bla >file2.txt

AP> Пайпы вроде как ядром поддерживаются и запуск бинарника тоже шелл не требует.
AP> Так что в этом примере собственно от шелла - перенаправление вывода?

пусть даже пайпы
пайпы ядром, а использование их какое?

pipe $in, $out;

if (fork)
{
	close $in;
	exec grep => @grep_args;
}
else
{
	close $out;

	pipe $in2, $out2;
	if (fork)
	{
		close $in2;
		exec awk => @awk_args;
	}
	else
	{
		close $out2;
		exec filter => @filter_args;
	}
}

это если честно их ядерные пользовать (если в коде  напутки  есть  -  то
сорри по памяти писал... PS: причем данный код в отличие от шелловского 
ошибки exec'ов не проверяет и пытается построить _всю_  цепочку  пайпов)

кроме того в шелле есть много прекрасных утилит которых нет в языках

то есть например мы пишем если

if wget uri -O-|grep -q bla-bla; then
	еcho на сайте появилось что мы ждем
fi

то это значит что wget парой опций можно настроить чтобы он
1. пытался до упора ломиться (-t 0)
2. ходил по location'ам итп (он без опций это делает)


в перле конечно есть WWW::Mechanize, но аналогичный код с его
использованием будет явно больше

в минимуме это так:

$browser=new WWW::Mechanize;
$browser->get(uri);
if ($browser->success() and $browser->content =~/bla-bla/)
{
    print "на сайте появилось что мы ждем\n";
}

однако ретраи данный код не делает (в отличие от wget), тут надо ваять
что-то вроде (правда диагностику что проблемы с сетью на нашей стороне
этот код не делает):

$browser=new WWW::Mechanize;
$browser->get(uri)  until $browser->success;
if ($browser->content =~/bla-bla/)
{
    print "на сайте появилось что мы ждем\n";
}

а если говорить о чем-то более сложном, например "забрать файл по
[rs]sh, посмотреть что в нем и сделать в зависимости от результата то-то
или се-то" то в перле может уже получаться бааальшой код, а в шелле
будут оставаться одна-две строки, причем в основном именно нужные
действия.


языки начинают рулить когда в шелле нет нужных кирпичиков или когда
скорость важна становится :)
--

. ''`. Dmitry E. Oboukhov
: :’  : unera@debian.org
`. `~’ GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Attachment: signature.asc
Description: Digital signature


Reply to: