2012-05-25 29 views
11

Tôi có một file chứa mã màu:tập tin hiển thị với các mã màu thoát - thông điệp khởi động từ daemon BootLog

Fri May 25 17:13:04 2012: [....] Starting MTA: exim4^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0c. 
Fri May 25 17:13:05 2012: [....] Loading cpufreq kernel modules...^[[?25l^[[?1c^[7^[[1G[^[[32m ok ^[[39;49m^[8^[[?25h^[[?0cdone (acpi-cpufreq). 

Làm thế nào tôi có thể hiển thị nó colorized trên một thiết bị đầu cuối linux?

+3

Có 'mèo' không hoạt động không? –

+0

mèo chỉ hoạt động sau khi tất cả '^ [' được thay thế bằng số bát phân tương đương '033' xem câu trả lời của riêng tôi bên dưới. – ripat

Trả lời

13

Vì mục đích hoàn chỉnh, tệp chứa tất cả các trình tự thoát này được tạo bởi các daemon bootlogd (gói khởi động trong gia đình debian) chụp tất cả các tin nhắn được tô màu được gửi tới bàn điều khiển trong khi khởi động. Trên giao diện điều khiển, các thư này lần đầu tiên được hiển thị như dòng sau:

[....] Starting periodic command scheduler: cron 

sau đó, khi dịch vụ hoặc lệnh được thực thi, một dãy thoát được gửi đến giao diện điều khiển để định vị con trỏ ở đầu dòng và in ok, thất bại, thông tin, cảnh báo vv ...

[ ok ] Starting periodic command scheduler: cron. 

Tất cả những thông điệp được chụp bởi các bootlogd daemon và ghi vào một tập tin với tất cả các trình tự thoát của nó bao gồm cả tái định vị một. Không có vấn đề ngoại trừ việc ^[ phải được thay thế bằng octal 033 để tệp được hiển thị chính xác. Nhưng, bởi vì có một bắt, daemon cũng thêm một dấu ngày ở phía trước của tin nhắn mà không thay đổi tọa độ của trình tự định vị con trỏ. Do đó, các thông báo ok, không thành công v.v ... sẽ ghi đè lên một phần của dấu ngày. Không hay.

Fri May 25 17:13:01 2012: [....] Starting periodic command scheduler: cron 
becomes... 
[ ok ay 25 17:13:01 2012: [....] Starting periodic command scheduler: cron. 

Giải pháp là thay đổi trình tự định vị con trỏ đó. Bằng cách thử và lỗi, tôi thấy rằng chuỗi là ^[1G. Lệnh sed sau cuối cùng hoàn thành công việc:

sed 's/\^\[/\o33/g;s/\[1G\[/\[27G\[/' /var/log/boot 

các bootlogd daemon nên thanh trừng tất cả các dãy thoát trước khi gửi các thông điệp giao diện điều khiển để các tập tin. Chúng tôi có thể gọi đây là lỗi không?

này "lỗi" cũng có thể có mặt trong tất cả những người thừa kế Debian như Ubuntu, Mint vv ...

+0

+1 Cùng một vấn đề ở đây. Định dạng 'sed' của bạn chính xác là nhật ký. Đây là một lỗi rõ ràng, và cho rằng trong debian gói 'bootlogd' là tất cả về việc ghi nhật ký:" _bootlogd ghi lại tất cả các thông điệp được in vào bảng điều khiển hệ thống trong khi khởi động hệ thống, và ghi lại các thông điệp đó vào logfile._ "(' dpkg -s bootlogd' của bootlogd ver. 2.88dsf-22.1), tôi coi nó là một phần quan trọng. – Alberto

+1

Đầu ra có thể được chuyển thành 'less -r'. Điều đó làm việc tốt cho tôi, ngoại trừ một dòng đăng nhập duy nhất từ ​​/etc/init.d/kbd trong Debian Wheezy. – mivk

4

câu trả lời Vì vậy ripat đã không làm việc cho tôi. Tôi đã tìm thấy một thay thế trên wiki Debian - https://wiki.debian.org/bootlogd.

Tại thời điểm viết bài này là:

sed $'s/\^\[/\E/g' /var/log/boot 

Đối với phiên bản bootlogd < 2,88 (không đóng dấu ngày). Đối với các phiên bản sau:

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot 

Định dạng sau cùng chỉ là một dòng của nhật ký của tôi, chỉ chênh lệch nhỏ. Cũng lưu ý rằng, như được chỉ ra trong báo cáo lỗi cho vấn đề này, $ hàng đầu trên mẫu sed làm cho các giải pháp này bash cụ thể.

+0

Điều đó cũng làm việc cho tôi ngoại trừ một dòng FAIL, có một chuỗi văn bản vô nghĩa sau FAIL. – Jez

2

Bạn có thể sử dụng bash built-in:

$ echo "$(< /your/file)" 
+0

Điều này làm việc tuyệt vời cho tôi để có được một đầu ra colorized từ một đầu ra giao diện điều khiển Jenkins. – dragon788

+0

Làm việc hoàn hảo để có được sản lượng màu từ /var/log/boot.log Tôi chỉ muốn xem liệu nó có thể thực hiện được không và chắc chắn là đủ. – user1003916

+0

Tôi đã thử điều này và nó hoạt động. Nhưng đối với các tệp dữ liệu lớn hơn, tôi muốn trang đầu ra (để điều hướng và tìm kiếm), vì vậy tôi đã cố gắng truyền nó qua 'less'. Thật không may, 'less' đã xóa màu và thay thế các mã ký tự bằng các từ tương đương có thể đọc được của con người. –

1

Hãy thử less -R /your/file.

Tôi thấy rằng more theo mặc định thực sự làm những gì tôi mong đợi: Nó hiển thị văn bản được tô màu trong thiết bị đầu cuối. Thực tế là more đã hoạt động, trong khi less (đó là em họ trẻ tuổi hơn) đã không khiến tôi nhìn vào trang man less.

Nó chỉ ra rằng less hỗ trợ cờ -R, xuất ra các chuỗi ESC làm ký tự kiểm soát thô. Đây là hành vi tương tự bạn nhận được với more, cộng với tất cả các cải tiến tìm kiếm và điều hướng đạt tiêu chuẩn với less.

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