On Tue, Feb 16, 2010 at 03:10:28AM +0200, Delian Krustev wrote: > #!/bin/sh > # usage: $0 PAGE > # > # Searches for manual pages for PAGE and prompts which one to display if more > # than one is found. > # > # Could be installed as /usr/local/bin/man which will usually be found in PATH > # before the default "man" command. Another suggestion - /usr/local/bin/m .
Изглежда много добре написан, браво! Само едно-две дребни нещица... > # Author: Delian Krustev <[email protected]> > # > # Licence: This script is in the public domain. > # > # FEEDBACK: > # - Does it interfere with something on your system when > # installed in place (or before) the default man binary ? > # - Any posix shell incompatibilities, nonstandard commands or command > # options ? > # - Optimizations, bugs, similar utilities ? > > MAN=/usr/bin/man > > if [ $# != 1 ]; then > exec $MAN "$@" > fi > if ! tty > /dev/null ; then > exec $MAN "$@" > fi > > PAGES="`whereis -m $1 | cut -d : -f 2-`" Лично аз това бих го написал малко по-параноично - бих quote-нал "$1", като се възползвам от факта, че POSIX-съвместимите shell-ове нямат нужда от кавички около `...` - и на мен ми отне няколко години да си приуча ума, че това е безопасно :) PAGES=`whereis -m "$1" | cut -d : -f 2-` > echo $PAGES | grep ' ' > /dev/null || exec $MAN "$@" Това не може ли да бъде заместено с [ -z "$PAGES" ] && exec $MAN "$@" > echo "This page is available in several sections: > " > # There should be a better way to sort pages. > # The "rev" stuff is ugly and errorprone - sed ? > 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) > done > echo " > Type a section or hit Enter for the default:" > > # $MAN is smart enough to display the proper section if it has enough chars > # to make a difference. E.g. you could type "3p" for "3posix". > read section > exec $MAN $section $1 Мдам, тук първата ми реакция беше exec $MAN "$section" "$1", но, като гледам, позволяваш празна секция, така че около $section не трябва да има кавички. Все пак аз лично бих сложил кавички около $1, така че exec $MAN $section "$1" Но като цяло много ми харесва, ще взема и да го пробвам тия дни :) Поздрави, Петър -- Peter Pentchev [email protected] [email protected] [email protected] PGP key: http://people.FreeBSD.org/~roam/roam.key.asc Key fingerprint 2EE7 A7A5 17FC 124C F115 C354 651E EFB0 2527 DF13 This sentence would be seven words long if it were six words shorter.
pgpaoReFtSXyf.pgp
Description: PGP signature
_______________________________________________ Lug-bg mailing list [email protected] http://linux-bulgaria.org/mailman/listinfo/lug-bg
