Re: [Lug-bg] нахранете ме отзад (feedback) моля
- Subject: Re: [Lug-bg] нахранете ме отзад (feedback) моля
- From: Peter Pentchev <roam@xxxxxxxxxxx>
- Date: Tue, 16 Feb 2010 11:32:37 +0200
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 <krustev@xxxxxxxxxxx>
> #
> # 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 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 would be seven words long if it were six words shorter.
Attachment:
pgpPGzRo9yw4n.pgp
Description: PGP signature
_______________________________________________
Lug-bg mailing list
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg
|