GNU/Linux >> Znalost Linux >  >> Linux

Jak získám systemctl, aby tiskl barevně, když s ním komunikuji z jiného než tty?

systemctl nezdá se, že má mechanismus pro určení, kdy se má výstup obarvit. Rychlým řešením by bylo podložení isatty(3) vždy vrátí true, čímž se oklame systemctl do myšlení stdout je interaktivní. Jmenovitě byste mohli udělat:

# 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 - na konci gcc příkaz říká gcc ke kompilaci kódu C (-xc ) z stdin (- ). Zbytek příznaků říká gcc vytvořit sdílený objektový soubor s názvem isatty.so . Všimněte si, že by to mohlo velmi dobře poškodit jiné programy, které spoléhají na isatty vrátit legitimní hodnotu. Zdá se však, že je v pořádku pro systemctl jako isatty Zdá se, že se používá výhradně pro účely určení, zda má obarvit svůj výstup.


watch -c  SYSTEMD_COLORS=1 systemctl status icinga2

man systemd říká

   $SYSTEMD_COLORS
       Controls whether colorized output should be generated.

tj. můžete tím vynutit barevný režim.


Na základě odpovědi @KarlC je zde skript, který generuje a poté zahrnuje knihovnu za běhu:

#!/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. Jak začít s cloudovým serverem FreeBSD

  2. Jak se popasovat s barevným výstupem

  3. Jak získat výstup z gdb.execute v PythonGDB (GDB 7.1)?

  1. Jak získat systémové statistiky pomocí node.js

  2. Jak získat název hostitele z IP (Linux)?

  3. Jak mohu získat obsah v barvách při čtení souboru s „méně“ nebo „více“?

  1. Jak přimět Vim, aby správně spolupracoval s Tmux?

  2. Jak vytisknout proměnnou s vycpaným zarovnáním na střed?

  3. Jak získat uživatelské jméno z uid