Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

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


 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.