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: pgpESU7bEiSEt.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.

Hosted by "Internet Group" Ltd. - Stara Zagora