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'.
Прикачам актуалната версия на скрипта.
Благодаря ти за отговора.
Поздрави
--
Делян
man
Description: application/shellscript
_______________________________________________ Lug-bg mailing list [email protected] http://linux-bulgaria.org/mailman/listinfo/lug-bg
