GNU/Linux >> Tutoriels Linux >  >> Linux

Comment puis-je faire en sorte que systemctl s'imprime en couleur lors d'une interaction avec un non-tty?

systemctl ne semble pas avoir de mécanisme pour spécifier quand colorer la sortie. Une solution rapide serait de caler isatty(3) pour toujours retourner vrai, trompant ainsi systemctl en pensant que stdout est interactif. A savoir vous pourriez faire :

# 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

Le -xc - à la fin du gcc la commande indique gcc pour compiler du code C (-xc ) de stdin (- ). Le reste des drapeaux indique gcc pour créer un fichier objet partagé nommé isatty.so . Notez que cela pourrait très bien casser d'autres programmes qui reposent sur isatty pour renvoyer une valeur légitime. Cela semble cependant convenir pour systemctl comme isatty semble être utilisé uniquement dans le but de déterminer s'il doit colorer sa sortie.


watch -c  SYSTEMD_COLORS=1 systemctl status icinga2

man systemd dit

   $SYSTEMD_COLORS
       Controls whether colorized output should be generated.

c'est-à-dire que vous pouvez forcer le mode couleur avec cela.


Basé sur la réponse de @KarlC, voici un script qui génère puis inclut la bibliothèque lors de l'exécution :

#!/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. Linux :Comment obtenir le temps de chargement d'une page distante avec une commande depuis le terminal ?

  2. Comment faire en sorte que Vim fonctionne correctement avec Tmux ?

  3. Comment démarrer avec un serveur cloud FreeBSD

  4. Comment puis-je faire en sorte que sed lise à partir de l'entrée standard?

  5. Comment obtenir ps pour imprimer le groupe?

Imprimez de n'importe où avec CUPS sous Linux

Comment installer Nginx avec Lets encrypt et obtenir A+ de SSLLabs Test

Comment démarrer avec Arch Linux

Comment démarrer avec Midnight Commander en 2022

Lors de la lecture d'un fichier avec "moins" ou "plus", comment puis-je obtenir le contenu en couleurs ?

Comment obtenir un masque de réseau à partir de bash ?