load avg a promptban, perlben

Elokerestem a Linux bevetes kozben cimu konyvet (anno megvettem, de sose volt idom, max. belenezni) es rabukkantam egy csodas kis proggira (#59), Hogyan jelenitsuk meg a Load Average-t a parancsbekero sorban. Legjobbkor, az egyik szerveren teljesen kulonbozo idopontokban fut el a LA, de hogy mysql vagy apache a gond, passz. Az azert jo lenne, ha top futtatasa nelkul, a promptban latnam az LA-t. A proggi:

#! /usr/bin/perl -w
use strict;
$|++;
my $host=`/bin/hostname`;
chomp $host;
while(1) {
open(LOAD, "/proc/loadavg") || die "Nem tudom megnyitni a /proc/loadavg: $!\n";
my @load=split(/ /,);
close(LOAD);
print "\ 033]0;";
print "$host: $load[0] $load[1] $load[2] at ", scalar (localtime);
print "\ 007";
sleep 2
}

A 3. sorban nem vagyok biztos, nekem pipe-nak tunt, de lehet, hogy hulyeseget irtam, nem ismerem perlt. A harom print sor kozul az elso es a harmadik csinalna (gondolom), hogy mindig "felulirja" az elozo kiirast. Sajnos, nem ezt teszi. Szepen sorban kiir mindent egymas utan. A kimenet ilyen lesz:
033]0;simplecdd: 0.00 0.00 0.00 at Fri Feb 8 10:26:52 2008 007 033]0;simplecdd: 0.00
0.00 0.00 at Fri Feb 8 10:26:54 2008 007 033]0;simplecdd: 0.00 0.00 0.00 at Fri Feb 8
10:26:56 2008 007 033]0;simplecdd: 0.00 0.00 0.00 at Fri Feb 8 10:26:58 2008 007
(Sortores nelkul, persze)
Masik gondom ezutan, hogy nem tudom hatterben futtatni, szoval a
./proggi &
nem mukszik, semmit nem ir, ha fg-vel elohozom, akkor fut. De akkor ugye ugyanott vagyok, mintha a top futna a konzolon...

Hozzászólások

> print "\ 033]0;";

Szóközt töröld ki.

> Akkor a 33-as meg a backspace lenne, ha mukodne...

\033 ESCape.

http://www.asciitable.com/

> print "\033]0;";

http://tldp.org/HOWTO/text/Xterm-Title


3.1.  xterm escape sequences

  Window and icon titles may be changed in a running xterm by using
  XTerm escape sequences. The following sequences are useful in this
  respect:

  ·  ESC]0;stringBEL -- Set icon name and window title to string

  ·  ESC]1;stringBEL -- Set icon name to string

  ·  ESC]2;stringBEL -- Set window title to string

     where ESC is the escape character (\033), and BEL is the bell
     character (\007).

Koszi, kozben en is utananeztem. Szoval annyira sikerult kijavitanom
print "\r" ez a kocsi-vissza. Igy egesz kellemes, tenyleg midig felulrija
az eredeti allapotot. A hibaja, hogy hatterben nem fut (& nem mukszik,
bg nem megy, csak fg), igy meg nem tudok gepelni utana...
Viszont a lenti megoldas nagyon tetszik (egyre jobban :) , igaz, hogy csak
akkor irja ki, ha nyomok egy entert, de ezt eleg gyakran teszem :)

Ez ugyen nem perl, hanem bash, de mukodik.

~/.bashrc-be:


PS1=$'\A \u at \e[1m\h\e[0m load: $(cut -d " " -f1-3 /proc/loadavg)\n$(dirs) \$ '
export PS1

Aha, ertem. Talan azert ilyen, mert nem ertek perlhez es ugy masoltam egy konyvbol, feltetelezve, hogy talan nem sikhulyeknek irodott a konyv. Belegondolva, igazad lehet, bar nem tudom, mennyi a perl inditasi ideje. (Egyebkent, ha futna, akkor a hatterben, szoval lehet, hogy itt cseszem el, folyamatosan futnia kellene a cuccnak es nem teszi)