εκτέλεση shell commands μέσα σε perl script (SOLVED)
Apollon Koutlidis
apollon at planewalk.net
Mon Apr 20 18:42:22 EEST 2009
Giorgos Keramidas wrote:
> 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):
>>
>> ...
>>
>> Τι έκανα / κατάλαβα λάθος;
>>
>
> Τίποτα μάλλον. Εγώ δε θυμόμουνα καλά και νόμισα ότι το -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
>
Τα παραπάνω printf sequences δε νομίζω ότι είναι terminal-aware: η
TERM=dumb δουλεύει με (n)curses-based ή άλλες terminal-aware εφαρμογές.
Στις πιο "δύσκολες" περιπτώσεις, ευτυχώς, είναι αρκετό :)
Α.
More information about the Linux-greek-users
mailing list