εκτέλεση 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