Re: [Lug-bg] нахранете ме отзад (feedback) моля
- Subject: Re: [Lug-bg] нахранете ме отзад (feedback) моля
- From: Delian Krustev <krustev@xxxxxxxxxxx>
- Date: Tue, 16 Feb 2010 19:43:39 +0200
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.
> > echo $PAGES | grep ' ' > /dev/null || exec $MAN "$@"
>
> Това не може ли да бъде заместено с [ -z "$PAGES" ] && exec $MAN "$@"
On Tue, 16 Feb 2010 12:18:26 +0200 Peter Pentchev wrote:
> Хм, не, извинявай - ако идеята му е направо да пуска man, когато
> има само една страница, тогава има смисъл да е точно така :)
Правилно. 0 или 1 страници.
> > for i in `for j in $PAGES ; do echo $j ; done | sort `; do
>
> Вътрешният цикъл може да бъде заместен с:
>
> echo "$PAGES" | xargs -n1 | sort
По-неефективно е, защото старитраме допълнителен процес :-)
>
> (първоначално мислех и за tr ' ' "\n" вместо xargs -n1, но тогава може
> да получиш празен първи и/или последен ред, а няма смисъл и от "egrep .")
>
> > printf "%10s %s\n" \
> > "[`echo $i | cut -d . --output-delimiter ' ' -f 1- | rev | cut -d ' ' -f 2 | rev`]" \
> > $i
>
> Такаааа... това наистина може да бъде опростено по няколко начина :)
>
> Най-простият е:
>
> sect=`echo "$i" | sed -e 's/.*\.\([^.]\+\)\.[^.]\+$/\1/'`
> printf '%10s %s\n' "[$sect]" "$i"
>
> (да, спокойно можеш да сложиш форматния низ на printf(1) в апострофи
> за всеки случай; самият printf(1) ще е достатъчно умен, за да разбере \n
> като символ за нов ред)
>
> Малко по-красиво, поне според мен:
>
> echo "$PAGES" | xargs -n1 | sort | \
> awk -F. '{printf "%10s %s\n", "[" $(NF-1) "]", $0}'
Това ми харесва, макар че мислех да стоя далеч от awk . Добавям
само проверка дали е архивирана страницата.
> Но като цяло много ми харесва, ще взема и да го пробвам тия дни :)
Мотивацията смятам е ясна.
Писна ми да пиша 'whereis -m x' ... 'man X x'.
Прикачам актуалната версия на скрипта.
Благодаря ти за отговора.
Поздрави
--
Делян
Attachment:
man
Description: application/shellscript
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|