LINUX.ORG.RU

Помогите, пожалуйста, с коньками.


0

1

У меня для отображения количества процессов используется такое:

${color 3f3e3c}Запущено$color $processes${color 3f3e3c} процессов
Но несколько напрягает то, что когда запущен 151 процесс, «Запущенно процессов» не совсем подходит. Подскажите, пожалуйста, как сделать замену окончаний в зависимости от цифры, на которую оканчивается количество процессов- как такое сделать в Bash я еще знаю, но конфиг коньков...


Ответ на: комментарий от AlexCones

Не, мне хочется более гладким языком:

${color 3f3e3c}Система работает без выключения уже$color $uptime
#${color 3f3e3c}Частота процессора $color $freq_g
${color 3f3e3c}Занято$color $mem ${color 3f3e3c}из$color $memmax ${color 3f3e3c}RAM -$color $memperc%
${color 3f3e3c}Процессор используется на$color $cpu%

Vekt
() автор топика
Ответ на: комментарий от AlexCones

Что-то у меня не работает даже сам скрипт. Скопировал(естественно, подменив формат вывода на свой(ну, не «комментариев, а процессов»))

sub rus_comments {
     # Число
     my $n = $_[0];
     # Возвращаемая строка
     my $str;
     # Сразу узнаем остатки от деления
     # на 10 и 100, чтобы не вычислять
     # при каждом сравнении:
     my $nmod10 = $n%10;
     my $nmod100 = $n%100;
     # Случай 1.
     if (!$n)
     {
               $str = "комментариев нет";
     }
     # Случай 2.
     elsif ( ($n eq 1) or ($nmod10 eq 1 and $nmod100 ne 11))
     {
               $str  =  "$n комментарий";
     }
     # Случай 3.
     elsif ( ($nmod10 > 1) and ($nmod10 < 5) and
               ($nmod100 ne 12 and $nmod100 ne 13 and $nmod100 ne 14))
     {
               $str = "$n комментария";
     }
     # Случай 4. Все остальные варианты.
     else
     {
               $str = "$n комментариев";
     }
     return $str;
 }
в файл, но по perl файл.pl $число никакого вывода нет..

Vekt
() автор топика
Ответ на: комментарий от AlexCones

Что-то мне подсказывает, что в коде на perl должно быть что-то еще... Но я его не знаю(

Vekt
() автор топика
Ответ на: комментарий от max_udoff

Говорю же, хочу, чтобы оно нормальным языком говорило. К чему эта фраза о школьных уроках? Если я где-то допустил ошибку- так и скажи.

Vekt
() автор топика
Ответ на: комментарий от Vekt

Говорю же, хочу, чтобы оно нормальным языком говорило

Мой вариант и есть нормальный язык. Или ты говоришь: «Количество яблока: два»?

max_udoff
()

С помощью exec попробую подставить вывод Bash скрипта. Позже отпишусь

Vekt
() автор топика

Просто предложу свой вариант подписей без извратов. См. тут на скриншоте.

Плюсы - компактность при достаточно понятном описании. Еще можно сделать картинкой командой ${image } в коньках. Тогда вопрос вообще отпадет и сэкономится еще больше места.

glibych ★★
()
Ответ на: комментарий от max_udoff

То есть, ты пришел в тред для того, чтобы сказать пару ничего не значащих фраз? Похвально

Vekt
() автор топика
Ответ на: комментарий от max_udoff

То есть, ты так и не смог понять, что такой вариант не подходит?Печально, ведь я уже один раз ответил.

Vekt
() автор топика
Ответ на: комментарий от max_udoff

Так зачем же продолжать убеждать меня в том, что лучше сделать так? Спасибо.

Vekt
() автор топика
Ответ на: комментарий от glibych

Я уже накатал скрипт, но нужна маааленькая помощь. Вот он:

if [ `ps -ef | wc -l | tail -c 2` == 1 ];
then answer="`ps -ef | wc -l` процесс";
elif [ `ps -ef | wc -l | tail -c 2` == 2 ];
then answer="`ps -ef | wc -l` процесса";
elif [ `ps -ef | wc -l | tail -c 2` == 3 ];
then answer="`ps -ef | wc -l` процесса";
elif [ `ps -ef | wc -l | tail -c 2` == 4 ];
then answer="`ps -ef | wc -l` процесса";
else answer="`ps -ef | wc -l` процессов";
fi;
echo $answer
Почему-то, если последняя цифра=1, то все равно пишется «171 процесса». Не знаю, почему.

Vekt
() автор топика
Ответ на: комментарий от Vekt

Причем, если взять отдельно первые 2 строки, то нормально пишет.

Vekt
() автор топика
Ответ на: комментарий от glibych

Какое-то отставание

[sergey@localhost ~]$ sh script                                                                                                                     
159 процессов                                                                                                                                       
[sergey@localhost ~]$ sh script                                                                                                                     
160 процесс                                                                                                                                         
[sergey@localhost ~]$ sh script                                                                                                                     
161 процесса                                                                                                                                        
[sergey@localhost ~]$    

Vekt
() автор топика

Как вариант... «Процессов всего - 150»

bulatus ★★
()
Ответ на: комментарий от Vekt

Извини, отвечал в другой ветке. Сейчас подымлю и гляну, что там у тебя.

glibych ★★
()
Ответ на: комментарий от Vekt

я уже не говорю про раковое дублирование кода; например:

answer="`ps -ef |wc -l` "
case `ps -ef | wc -l | tail -c 2` in
	1) answer+='процесс';;
	2) answer+='процесса';;
	3) answer+='процесса';;
	4) answer+='процесса';;
	*) answer+='процессов';;
esac
echo $answer

anonymous
()
Ответ на: комментарий от anonymous

фикс:

answer="`ps -ef |wc -l` "
case `ps -ef | wc -l | tail -c 2` in
	1)     answer+='процесс';;
	[2-4]) answer+='процесса';;
	*)     answer+='процессов';;
esac
echo $answer

anonymous
()
Ответ на: комментарий от anonymous

Во - вменяемый код;)

Vekt, а можно и так:

answer="`ps -ef |wc -l` процесс"
case `echo $answer | tail -c 2` in
	1) ;;
	2) answer+='а';;
	3) answer+='а';;
	4) answer+='а';;
	*) answer+='ов';;
esac
echo $answer

glibych ★★
()
Ответ на: комментарий от anonymous

Да я понимаю, что криво. Но, блин, отставание почему?

Vekt
() автор топика
Ответ на: комментарий от anonymous

Вот нормальная пара вариантов для разнообразия, но менее наглядны.

answer="`ps -ef |wc -l` процесс"
case `echo $answer |  tail -c 17 | head -c 1` in
	1)	;;
	[2-4])	answer+='а';;
	*) 	answer+='ов';;
esac
echo $answer
NP="`ps -ef |wc -l` "
case `echo $NP | tail -c 2` in
	1)	E='';;
	[2-4])	E='а';;
	*)	E='ов';;
esac
echo $NPпроцесс$E

P.S.

Не могу понять почему у меня подсветка синтаксиса не работает.. вроде code=Bash указываю..

glibych ★★
()
Ответ на: комментарий от Vekt

Чуть упрощенный твой вариант

N=`ps -ef | wc -l`

NP=`echo $N | tail -c 2`

if [ $NP == 1 ]; then answer=$N' процесс';

elif [ $NP == 2 ]; then answer=$N' процесса';

elif [ $NP == 3 ]; then answer=$N' процесса';

elif [ $NP == 4 ]; then answer=$N' процесса';

else answer=$N' процессов';

fi;

echo $answer

Самое удивительное, что он работает;)

P.S.

Во время сравнений вычисляются разные значения в функции ps - отсюда полная опа в твоем коде. Его нужно было зафиксировать перед сравнением.

glibych ★★
()
Ответ на: комментарий от anonymous

В этом варианте и в нижеприведенном фиксе тоже возможна ошибка в некоторых случаях - значение функции фиксируется перед сравнением, но вычисляется повторно в сравнении, а выводится уже не то значение, которое сравнивалось, а зафиксированное значение перед сравнением. Во завернул... )))

P.S.

Однако, на то мы и люди, чтобы иногда ошибаться.

glibych ★★
()

Всем спасибо! Само по себе оно в коньках не взлетело, пришлось вставить в скрипт обертку и уже его в Коньки подставлять, но все работает. Еще раз спасибо!

Vekt
() автор топика
Ответ на: комментарий от ccoder

Вы абсолютно правы, надо будет сделать. Так всегда бывает, когда налету пытаешься поправить чей-нибудь код. Чуть позднее выложу.

glibych ★★
()
Ответ на: комментарий от Vekt

Доделаем. Никогда нельзя бросать начатое, можно лишь отложить.

glibych ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.