systemctl
dường như không có cơ chế xác định thời điểm tô màu đầu ra. Một giải pháp nhanh chóng sẽ là shim isatty(3)
để luôn luôn trả về sự thật, do đó đánh lừa systemctl
suy nghĩ thiết bị xuất chuẩn là tương tác. Cụ thể bạn có thể làm:
# echo "int isatty(int fd) { return 1; }" | gcc -O2 -fpic -shared -ldl -o isatty.so -xc -
# LD_PRELOAD=./isatty.so watch -n300 --color systemctl status plexmediaserver
Phần -xc -
cuối của gcc
lệnh gcc
sẽ biên dịch mã C ( -xc
) từ stdin ( -
). Phần còn lại của các cờ báo gcc
để tạo một tệp đối tượng chia sẻ có tên isatty.so
. Lưu ý rằng điều này rất có thể phá vỡ các chương trình khác dựa trên isatty
để trả về một giá trị hợp pháp. Tuy nhiên, dường như nó vẫn ổn systemctl
vì isatty
dường như chỉ được sử dụng cho mục đích xác định xem nó có nên tô màu đầu ra của nó hay không.