Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: [Lug-bg] нахранете ме отзад (feedback) моля


  • Subject: Re: [Lug-bg] нахранете ме отзад (feedback) моля
  • From: Peter Pentchev <roam@xxxxxxxxxxx>
  • Date: Wed, 17 Feb 2010 00:36:28 +0200

On Tue, Feb 16, 2010 at 07:43:39PM +0200, Delian Krustev wrote:
> On Tue, 16 Feb 2010 11:32:37 +0200 Peter Pentchev wrote:
> > Лично аз това бих го написал малко по-параноично - бих quote-нал "$1",
> > като се възползвам от факта, че POSIX-съвместимите shell-ове нямат
> > нужда от кавички около `...` - и на мен ми отне няколко години да
> > си приуча ума, че това е безопасно :)
> > 
> > PAGES=`whereis -m "$1" | cut -d : -f 2-`
> 
> Не мисля че има нужда от quote-ване но все пак ще последвам съвета ти.
> Ако има интервал в името на страницата долния греп няма да свърши
> работа така или иначе.
> 
> Улеснението е, че скрипта е предназначен за интерактивна употреба
> и бърза да делегира работата на оригиналната програма ако не е извикан
> интерактивно.
> Така че коректното по-скоро е да се валидира $1 . Но понеже едва ли има
> някоя смислена страница с интервал в името, или каквото и да било
> нуждаещо се от quote-ване го пропускам тоя момент за KISS.

Просто съм свикнал да го правя :)  А иначе от валидирането може да има
смисъл и в друг случай - ако човекът е извикал скрипта не просто с нещо
с интервал или специални символи, ами с нещо, което започва с тире/минус,
така че whereis(1) да го възприеме като опция, а не параметър.
Но... за момента може да се мине и без това, макар че едно expr повече
или по-малко не е голяма загуба на ресурси.

> > > for i in `for j in $PAGES ; do echo $j ; done | sort `; do
> > 
> > Вътрешният цикъл може да бъде заместен с:
> > 
> >   echo "$PAGES" | xargs -n1 | sort
> 
> По-неефективно е, защото старитраме допълнителен процес :-)

:)

[snip]
> > Малко по-красиво, поне според мен:
> > 
> >   echo "$PAGES" | xargs -n1 | sort | \
> >     awk -F. '{printf "%10s %s\n", "[" $(NF-1) "]", $0}'
> 
> Това ми харесва, макар че мислех да стоя далеч от awk .

Мдам, то и аз се замислих дали, като така и така вкарваме и awk в
цялата работа, не си струва да се хване човек да го пренапише това
цялото на нещо друго, ама всъщност awk не е чак толкова тежък,
а скриптчето ти (целият man) е просто, лесно за четене и даже удобно.

> Добавям само проверка дали е архивирана страницата.

Мдам, добра идея.

> > Но като цяло много ми харесва, ще взема и да го пробвам тия дни :)
> 
> Мотивацията смятам е ясна.
> Писна ми да пиша 'whereis -m x' ... 'man X x'.

Да, така е :)  Макар че понякога "man -a x" помага.

> Прикачам актуалната версия на скрипта.

Отново само едно мъъъничко коментарче, което миналия път пропуснах,
защото реших, че може да бъде оптимизирано чрез премахване, а не
се оказа точно така:

  echo $PAGES | grep ' ' > /dev/null || exec $MAN "$@"

Значи... няколко варианта:

  1. echo $PAGES | fgrep -q ' ' || exec $MAN "$@"
  
  2. expr "x$PAGES" : '.* ' > /dev/null || exec $MAN "$@"
     (стар трик от MS-DOS batch files - "x$PAGES" ни пази от проблеми,
      когато $PAGES е празно (макар че точно сега това не е проблем)
      или започва с тире (някои версии на expr(1) на някои операционни
      системи много се шашкат в този случай, и понякога дори -- не помага)

  3. [ "$PAGES" != "${PAGES#* }" ] || exec $MAN "$@"
     (я гледай ти, няма допълнителни процеси ;)

Аналогично към края на новата версия:

  if ! echo $section | grep -E '^[[:digit:]][[:alnum:]]*$' > /dev/null ; then

може да бъде заменено с:

  if echo $section | egrep -qe '^[[:digit:]][[:alnum:]]*$'; then

или:

  if expr "x$section" : 'x[[:digit:]][[:alnum:]]*$' > /dev/null; then

> Благодаря ти за отговора.

А, ти пък, няма проблем - хора, които ме познават, и хора, които имат
съмнителното щастие да ме гледат как работя (да не говорим за тези,
чиято работа зависи от това да си свърша моята ;), знаят, че понякога
съм в състояние да прекарам половин час в далеч-отвъд-смисленото
оптимизиране на парче shell, Perl, C или какъв ли не още код, просто
защото "ама така ще е по-красиво и ще работи по-надеждно и по-добре!"
(всичките три пъти на седмица, когато ще се изпълнява... това за
 нещата, които оптимизирам де, не за твоя man)

Поздрави,
Петър

-- 
Peter Pentchev	roam@xxxxxxxxxxx    roam@xxxxxxxx    roam@xxxxxxxxxxx
PGP key:	http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint	2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13
This sentence contains exactly threee erors.

Attachment: pgprQNWiiXX7x.pgp
Description: PGP signature

_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg


 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.