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

 

начало

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

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

семинари ...

линукс учебник

документи

как да ...

 

 

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

Re: [Lug-bg] нахранете ме отзад (feedback) моля


  • Subject: Re: [Lug-bg] нахранете ме отзад (feedback) моля
  • From: Delian Krustev <krustev@xxxxxxxxxxx>
  • Date: Tue, 16 Feb 2010 19:43:39 +0200

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'.

Прикачам актуалната версия на скрипта.


Благодаря ти за отговора.


Поздрави
--
Делян

Attachment: man
Description: application/shellscript

_______________________________________________
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