2012-02-09 47 views
5

Tôi có tập lệnh Perl sử dụng Term::ANSIColor. Nó từng là trường hợp nếu tôi chuyển hướng đầu ra sang một tệp > file.txt thì tệp chỉ chứa văn bản chứ không phải mã màu ^[[0mThông số màu Perl với đầu ra được chuyển hướng

Thứ gì đó đã thay đổi trên máy của tôi, Ubuntu 10.04, như vậy đầu ra được chuyển hướng bao gồm các đặc biệt này ký tự chỉ định màu.

Bất kỳ ý tưởng nào về cách sửa lỗi này? Tôi có thể phát hiện chuyển hướng đầu ra từ bên trong kịch bản perl và bỏ qua phần màu không?

Cảm ơn!

Trả lời

6

Bạn có thể kiểm tra xem bạn đang chạy một cách tương tác bằng cách sử dụng IO::Interactive gói:

use IO::Interactive qw(is_interactive); 

if (is_interactive()) 
{ 
    # show some fancy color 
} 

Lý do đằng sau sử dụng IO :: Interactive (thay vì chỉ là thử nghiệm nếu STDIN là một tty với các nhà điều hành -t) là rộng rãi explained by Damian Conway.

+2

Tuy nhiên, đối với một tập lệnh ngắn, -t STDIN hoàn toàn có thể chấp nhận được. Tôi sử dụng nó cho bất kỳ một lần tôi muốn colorized. – zostay

+0

@zostay Tôi đã không thành công trong việc ngăn ngừa màu sắc bằng cách kiểm tra -t STDIN. Tập lệnh của tôi được chạy dưới dạng './Script.prl> file.txt'. Tuy nhiên kiểm tra -t STDOUT hoạt động chính xác – Mikhail

+0

@Mikhail: trong trường hợp đó bạn có thể muốn kiểm tra 'STDOUT' thay cho' STDIN'. –

Các vấn đề liên quan