GNU/Linux >> Linux Esercitazione >  >> Linux

Come faccio a stampare systemctl a colori quando interagisco con un non-tty?

systemctl non sembra avere un meccanismo per specificare quando colorare l'output. Una soluzione rapida sarebbe shim isatty(3) per restituire sempre true, ingannando così systemctl nel pensare che stdout sia interattivo. Vale a dire che potresti fare:

# 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

Il -xc - alla fine del gcc comando dice a gcc per compilare il codice C (-xc ) da stdin (- ). Il resto dei flag indica gcc per creare un file oggetto condiviso denominato isatty.so . Nota che questo potrebbe benissimo danneggiare altri programmi che si basano su isatty restituire un valore legittimo. Tuttavia sembra andare bene per systemctl come isatty sembra essere utilizzato esclusivamente allo scopo di determinare se deve colorare il suo output.


watch -c  SYSTEMD_COLORS=1 systemctl status icinga2

man systemd dice

   $SYSTEMD_COLORS
       Controls whether colorized output should be generated.

ad esempio, puoi forzare la modalità colore con quella.


Sulla base della risposta di @KarlC, ecco uno script che genera e quindi include la libreria in fase di esecuzione:

#!/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. Come iniziare con un server cloud FreeBSD

  2. Come ottenere l'output da gdb.execute in PythonGDB (GDB 7.1)?

  3. Come ottenere statistiche di sistema con node.js

  4. Come ottenere netmask da bash?

  5. Come ottenere il nome dell'utente da uid

Stampa da qualsiasi luogo con CUPS su Linux

Come installare Nginx con Lets crittografa e ottieni A+ da SSLLabs Test

Come far funzionare correttamente Vim con Tmux?

Come iniziare con Arch Linux

Come iniziare con Midnight Commander nel 2022

Quando leggo un file con "meno" o "più", come posso ottenere il contenuto a colori?