GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mendapatkan systemctl untuk mencetak dalam warna saat berinteraksi dengan non-tty?

systemctl tampaknya tidak memiliki mekanisme untuk menentukan kapan harus mewarnai keluaran. Solusi cepatnya adalah dengan shim isatty(3) untuk selalu mengembalikan true, sehingga menipu systemctl ke dalam pemikiran stdout bersifat interaktif. Yakni Anda bisa melakukan:

# 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

-xc - di akhir gcc perintah memberi tahu gcc untuk mengkompilasi kode C (-xc ) dari stdin (- ). Bendera lainnya menyatakan gcc untuk membuat file objek bersama bernama isatty.so . Perhatikan bahwa ini dapat merusak program lain yang bergantung pada isatty untuk mengembalikan nilai yang sah. Namun tampaknya baik untuk systemctl sebagai isatty tampaknya semata-mata digunakan untuk tujuan menentukan apakah outputnya harus diwarnai.


watch -c  SYSTEMD_COLORS=1 systemctl status icinga2

man systemd kata

   $SYSTEMD_COLORS
       Controls whether colorized output should be generated.

yaitu, Anda dapat memaksakan mode warna dengan itu.


Berdasarkan jawaban @KarlC, berikut adalah skrip yang menghasilkan dan kemudian menyertakan pustaka saat runtime:

#!/bin/bash
set -euo pipefail

function clean_up {
  trap - EXIT # Restore default handler to avoid recursion
  [[ -e "${isatty_so:-}" ]] && rm "$isatty_so"
}
# shellcheck disable=2154 ## err is referenced but not assigned
trap 'err=$?; clean_up; exit $err' EXIT HUP INT TERM

isatty_so=$(mktemp --tmpdir "$(basename "$0")".XXXXX.isatty.so)
echo "int isatty(int fd) { return 1; }" \
  | gcc -O2 -fpic -shared -ldl -o "$isatty_so" -xc -
# Allow user to SH=/bin/zsh faketty mycommand
"${SH:-$SHELL}" -c 'eval [email protected]' - LD_PRELOAD="$isatty_so" "[email protected]"

Linux
  1. Bagaimana cara mendapatkan output dari gdb.execute di PythonGDB (GDB 7.1)?

  2. Bagaimana saya mendapatkan sed untuk membaca dari input standar?

  3. Cara mendapatkan statistik sistem dengan node.js

  1. Linux:Bagaimana cara mendapatkan waktu buka halaman jarak jauh dengan perintah dari terminal?

  2. Bagaimana cara mendapatkan netmask dari bash?

  3. Cara mendapatkan nama pengguna dari uid

  1. Bagaimana Agar Vim Bekerja Dengan Tmux Dengan Benar?

  2. Bagaimana Cara Mencetak Variabel Dengan Perataan Pusat Empuk?

  3. Bagaimana Cara Membuat Vm Dari Awal Dengan Virsh?