Dado que conky generalmente está diseñado para usar lua
, puede haber una solución más limpia que involucre ese lenguaje, pero aquí hay un script de preprocesamiento -rápido escrito en perl
. Espera un archivo de configuración simple y extrae de la parte conky.config={...}
las variables que se están configurando. Por ejemplo, minimum_width = 230,
creará una variable perl con el mismo nombre y la establecerá en ese valor.
Luego pasa por la parte conky.text=[[...]]
y busca expresiones dentro de @...@
. Esto supone que no usa el carácter @
para nada más. Luego evalúa la expresión de perl que ha puesto dentro. Perl también usa $
delante de variables simples, por lo que puede usar expresiones como @$minimum_width/5@
y será reemplazada por 230/5, es decir, 46.
#!/usr/bin/perl
# https://unix.stackexchange.com/a/445140/119298
# parse conky 1.10 vars in conky.config and eval @expression@ in.text part
use strict;
use Safe;
my $pack = new Safe();
sub replace{
my ($a,$body,$c) = @_;
# $body =~ s/@(.*?)@/eval($1)/gse;
$body =~ s/@(.+?)@/$pack->reval($1)/gse; # evaluate @expression@ using vars
return $a.$body.$c;
}
my $config = join('',<>);
if($config =~ m/conky\.config\s*=\s*\{(.*?)\}/s){
my $vars = "$1,";
while($vars =~ m/\s*([a-z0-9_]+)\s*=\s*(.+?)\s*,/gs){
${$pack->varglob($1)} = $2;
}
}
$config =~ s/(conky\.text\s*=\s*\[\[)(.*?)(\]\])/replace($1,$2,$3)/se;
print $config;
Coloque este script en un archivo, digamos conkyparse
, y hágalo ejecutable con chmod +x conkyparse
. Mueva su archivo ~/.conkyrc
para decir, preconky
y edítelo como se indicó anteriormente, luego, antes de ejecutar conky, ejecute conkyparse <preconky >~/.conkyrc
para calcular y reemplazar las expresiones.
Tenga en cuenta que también puede inventar y utilizar sus propios nombres de variables. Para evitar un error conky, debe ocultar su definición dentro de un comentario (una línea que comienza--
). Aquí hay un ejemplo preconky
archivo:
conky.config = {
minimum_width = 230,
-- myvar = 22,
}
conky.text = [[
${goto @3*$myvar@} ${cpugraph 14,@$minimum_width/2@ e19e19 ffffff}
]]
y el archivo de salida resultante
conky.config = {
minimum_width = 230,
-- myvar = 22,
}
conky.text = [[
${goto 66} ${cpugraph 14,115 e19e19 ffffff}
]]
Вот начало написанного на awk валидатора, который проверяет:
*
... затем напечатайте (оскорбительную строку ).
На примере ввода:
53 23 * * * root /usr/lib64/sa/sa2 -A
53 23 1 * * root /usr/lib64/sa/sa2 -A
53 23 2 * * root /usr/lib64/sa/sa2 -A
Вывод:
53 23 2 * * root /usr/lib64/sa/sa2 -A
Это должно быть улучшено для обработки названий месяцев и диапазонов (или даже @monthly
), как позволяет синтаксис cron.
awk '!/^#/ && NF >= 7 && ($3 != 1 && $3 != "*") && $4 != "*" 1'