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 Lug-bg@linux-bulgaria.org http://linux-bulgaria.org/mailman/listinfo/lug-bg