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: pgp2c5jQEJPEi.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.

Hosted by "Internet Group" Ltd. - Stara Zagora