ls -l --color=auto | tee output.log
Không có ống / tee nó có màu. Làm cách nào tôi có thể làm cho nó giữ được màu trong khi sử dụng tee
(chỉ có thể được tô màu trên màn hình, tôi không quan tâm đến màu sắc trong nhật ký).
ls -l --color=auto | tee output.log
Không có ống / tee nó có màu. Làm cách nào tôi có thể làm cho nó giữ được màu trong khi sử dụng tee
(chỉ có thể được tô màu trên màn hình, tôi không quan tâm đến màu sắc trong nhật ký).
Câu trả lời:
Đơn giản chỉ cần chèn unbuffer
trước bất kỳ lệnh nào để làm cho nó nghĩ rằng nó đang ghi vào một đầu ra tương tác ngay cả khi nó thực sự được chuyển sang một tệp thực thi khác. Điều này sẽ giữ màu trong trường hợp ls
.
Ví dụ
unbuffer ls -l --color=auto | tee output.log
Nếu bạn chưa cài đặt nó, trên Ubuntu và các bản phân phối Linux khác của Debian bạn có thể cài đặt unbuffer
bằng cách thực hiện.
sudo apt-get install expect-dev
xcodebuild
- thay vào đó tôi có các đường cắt nhỏ không có màu. unbuffer xcodebuild | less -R
làm việc hoàn hảo, tuy nhiên.
expect-dev
gói. expect
Là đủ.
Sử dụng tùy chọn ls --color=always
--color=auto
sẽ không tô màu đầu ra cho một đường ống - vì lý do rõ ràng.
Trang chính cho biết như sau:
Với --color = auto, mã màu chỉ được xuất nếu đầu ra tiêu chuẩn được kết nối với thiết bị đầu cuối (tty).
ls -l
chỉ là một ví dụ. Tôi có một lệnh hoàn toàn khác (nhật ký heroku) dải màu khi được dẫn tới tee
. Và tôi muốn "sửa / thay đổi" tee / pipe chứ không phải lệnh tôi đang thực thi.
ls
. Xem câu trả lời của tôi khắc phục sự cố cho tất cả các chương trình, bao gồm nhật ký heroku.
Tôi sẽ mở rộng script
giải pháp được đưa ra trong nhận xét của câu trả lời được chấp nhận. Việc sử dụng script
có thể hữu ích trong trường hợp bạn không thể hoặc không muốn cài đặt gói mong đợi có chứa unbuffer
lệnh.
In ls
đầu ra ra thiết bị xuất chuẩn và tập tin với mã màu :
script -efq output.log -c "ls -l --color=auto"
trong đó ( man script
):
-e, --return Return the exit code of the child process. Uses the same format as bash termination on signal termination exit code is 128+n. -f, --flush Flush output after each write. This is nice for telecooperation: one person does `mkfifo foo; script -f foo', and another can supervise real-time what is being done using `cat foo'. -q, --quiet Be quiet (do not write start and done messages to either standard output or the typescript file).
Xem tập tin đầu ra với màu sắc:
less -r output.log
-e
giống như --return
- không cần cả hai; -efq
là --return --flush --quiet
.