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
|