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