LINUX.ORG.RU

FVWM: awk в FvwmScript не работает

 


0

1

Использую awk чтобы вычислить использование цпу:

Set $sp = (GetOutput {echo $(grep 'cpu0' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print int(usage*118/100)}')} 1 -1)
Почему-то в консоли строка работает и выдает целое число, а в скрипте FvwmScript упорно не хочет. В чем может быть дело?

★★★★

Вот это ад. Убери grep и echo хотя бы, а лучше перепиши на Go (на C ещё лучше, но уже не принципиально).

anonymous
()

или запускай всю эту жуткую конструкцию через bash -c "...", или используй только awk -

awk '/cpu0/ {usage=($2+$4)*100/($2+$4+$5)} END {print int(usage*118/100)}' /proc/stat

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

Спасибо, сработало. Можно кстати опустить bash. «This command is executed by /bin/sh as if you typed it on the command line». Но мне это не помогло. Может подскажите еще на один вопрос. Хочу сделать динамический бар, полоску отображающую загрузку цпу. Нашел неплохой скрипт вот здесь https://www.opendesktop.org/s/Window-Managers/p/1018276/, но почему-то скрипт работает некоторое время и затем падает. Опытным путем нашел что проблема в ChangeSize. В манах сказано, что ему надо подсовывать целое число, а в скрипте оно не целое. Решил упростить скрипт до минимума, чтобы заработал. Строка, что я писал выше выдает целое число загрузки цпу (нашел в инете). Но скрипт (ниже) опять не работает. Идея скрипта простая - статическая планка 120х4 покрывается переменной планкой изначального размера 118х2. Затем периодически длина второй пересчитывается. Планка появляется, но через 2 секунды исчезает полностью. Если вставить статически Set $sp = 9, то картинка остается, но естественно статическая. Совершенно уже не понимаю в чем дело, два дня мучаюсь. Может понимаете где лажа?

WindowTitle {Status}
WindowSize 120 35

Init
Begin
  Set $probarColor = {#2f9644} 
  ChangeBackColor 1 $probarColor
  ChangeBackColor 3 $probarColor
End

PeriodicTasks
Begin
##### CPU Status
  If (RemainderOfDiv (GetTime) 2) == 0 Then
  Begin
  Set $sp =  PipeRead 'bash $[HOME]/.fvwm/scripts/StaTux/cpu.sh'
  ChangeSize 3 $sp 2
  End
End

Widget		1
Property
  Type		ItemDraw
  Size		120 4
  Position		0 0
  Flags		NoFocus NoReliefString
Main
  Case message of
  End
  
Widget		2
Property
  Type		ItemDraw
  Size		118 2
  Position		1 1
  Flags		NoFocus NoReliefString
Main
  Case message of
  End
  
Widget		3
Property
  Type		ItemDraw
  Size		118 2
  Position		1 1
  Flags		NoFocus NoReliefString
Main
  Case message of
  End

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

Не прокатывает, вариант выше прокатил, но скрипт не работает.

rustamych ★★★★
() автор топика

Вангую потому, что пайп это конструкция шелла, а твоя писана передаётся на шеллу, а тупо execve().

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

Прокатила такая вот конструкция

ChangeSize 3  (GetOutput {echo $(bash $[HOME]/.fvwm/scripts/StaTux/cpu1.sh)} 1 -1) 2
где в скрипте
#!/bin/sh
DELAY=${1:-1}
{ cat /proc/stat; sleep "$DELAY"; cat /proc/stat; } | awk '/^cpu0 / {usr=$2-usr; sys=$4-sys; idle=$5-idle; iow=$6-iow} END {total=usr+sys+idle+iow; print int((total-idle)*118/total)}'
Все работает минут пять, а потом ломается. Уже совсем не понимаю почему. Все сделал чтобы число было целое, но не помогло. Видимо дело не в этом. Настройка fvwm оказалось довольно муторным делом. На форуме fvwm желающих помочь совсем нет, а русского форума нет. Скрипт упрости совсем но ломается и причина совсем непонятная. Где то мелькнуло сообщение, что дела в видеокарте и в иксах. Ну тогда совсем тухло. Если вместо динамической полоски выводить просто число - процент загруженности, то все работает. Но у самого автора скрипт работает, вот что удивительно.

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