εκτέλεση shell commands μέσα σε perl script (SOLVED)

Giorgos Keramidas keramida at ceid.upatras.gr
Mon Apr 20 17:08:13 EEST 2009


On Mon, 20 Apr 2009 13:36:03 +0100, Apollon Koutlidis <apollon at planewalk.net> wrote:
> Giorgos Keramidas wrote:
>>> FYI και για άλλες περιπτώσεις που δε σου δίνουν επιλογές σαν το -b της
>>> top, το ίδιο μπορείς να κάνεις και αλλάζοντας τον τύπο του τερματικού σε
>>> dumb - π.χ.: TERM=dumb top -m1
>>
>> ... ή να φιλτράρεις το output μέσα από το col(1) utility:
>>
>>     % top | col -b | mystuff
>
> Χμιχμι, την col δεν την είχα ξαναματακούσει αλλά στον εργασιοσταθμό μου
> δε φαίνεται να λειτουργεί "as advertised" (i.e. δεν παράγει καθαρό
> κείμενο κατάλληλο για logging / text processing):
>
> akoutlid at jalfrezi:~$ top -n1 | col -b
> H2JmBtop - 13:34:01 up 12 days, 56 min,  3 users,  load average: 0.29,
> 0.39, 0.42mB39;49mK
> Tasks:mB39;49mmB 165 mB39;49mtotal,mB39;49mmB    1
> mB39;49mrunning,mB39;49mmB 164 mB39;49msleeping,mB39;49mmB   0
> mB39;49mstopped,mB39;49mmB   0 mB39;49mzombiemB39;49mK
> ...
>
> Τι έκανα / κατάλαβα λάθος;

Τίποτα μάλλον.  Εγώ δε θυμόμουνα καλά και νόμισα ότι το -b option
αφαιρεί και ANSI escapes, αλλά φαίνεται πως όχι:

$ printf '\033[36mlala\033[0m\n' | col -b
36mlala0m
$

Δυστυχώς και το TERM=dumb δε φαίνεται να αφαιρεί τέτοια escapes, και τα
vis(1) και unvis(1) απλά τα μετατρέπουν σε printable μορφή :(

$ env TERM=dumb printf '\033[36mlala\033[0m\n' | hd
00000000  1b 5b 33 36 6d 6c 61 6c  61 1b 5b 30 6d 0a        |.[36mlala.[0m.|
0000000e
$ printf '\033[36mlala\033[0m\n' | env TERM=dumb cat | hd
00000000  1b 5b 33 36 6d 6c 61 6c  61 1b 5b 30 6d 0a        |.[36mlala.[0m.|
0000000e
$ printf '\033[36mlala\033[0m\n' | vis | hd
00000000  5c 5e 5b 5b 33 36 6d 6c  61 6c 61 5c 5e 5b 5b 30  |\^[[36mlala\^[[0|
00000010  6d 0a                                             |m.|
00000012

Τζίφος...



More information about the Linux-greek-users mailing list