নন-টিটিটি থেকে ইন্টারঅ্যাক্ট করার সময় আমি কীভাবে সিস্টেমেটল রঙে মুদ্রণ করতে পারি?


19

যখন আমি এরকম একটি কমান্ড চালাই:

# systemctl status plexmediaserver

আমি সুন্দর রঙিন আউটপুট পেতে। তবে আমি যখন নিম্নলিখিত কমান্ডটি চালাচ্ছি:

# watch -n300 --color systemctl status plexmediaserver

watchরঙ থেকে এই আদেশটি করার কোনও উপায় আছে কি systemctl? আমি ম্যান পৃষ্ঠাটি systemctlদেখেছি কিন্তু কোথাও রঙের উল্লেখ দেখতে পাচ্ছি না।


টাওল্ফের উত্তরটি গ্রহণের জন্য দয়া করে বিবেচনা করুন যা বর্তমানে গৃহীত কোনও (আপনার) চেয়ে অনেক ভাল। তুমাকে অগ্রিম ধন্যবাদ.
পাইওটার ডব্রোগোস্ট

উত্তর:


17
watch -c  SYSTEMD_COLORS=1 systemctl status icinga2

man systemd বলেছেন

   $SYSTEMD_COLORS
       Controls whether colorized output should be generated.

অর্থাৎ, আপনি এটির সাথে রঙ মোড জোর করতে পারেন।


… এবং অবশ্যই, এখন SYSTEMD_COLORSপর্যন্ত নামটির চেয়ে আরও বেশি কিছু করা যায়, কারণ ক্লিকযোগ্যযোগ্য লিঙ্কগুলির জন্য 2018 এর মাঝামাঝি সমর্থন চালু হয়েছে, কিছু পালানোর কোড এবং urlified URL- এর সাথে লিটারের আউটপুট - যা ভাগ্যক্রমে বন্ধ করা যেতে পারেSYSTEMD_URLIFY=0
eMPee584

23

systemctlআউটপুটটি কখন রঙ করবেন তা নির্দিষ্ট করার জন্য কোনও ব্যবস্থা নেই বলে মনে হয়। একটি দ্রুত সমাধান হ'ল isatty(3)সর্বদা সত্য ফিরে আসার জন্য, এভাবে স্টডআউটকে systemctlচিন্তাভাবনা করে ইন্টারেক্টিভ করা হয়। যেমন আপনি করতে পারেন:

# 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 -শেষে gccকমান্ড বলে gcc(গ কোড কম্পাইল -xc) stdin থেকে ( -)। বাকী পতাকাগুলি gccএকটি ভাগ করা অবজেক্ট ফাইল নামে তৈরি করতে বলে isatty.so। মনে রাখবেন যে এটি অন্যান্য প্রোগ্রামগুলিকে খুব ভালভাবে ভেঙে ফেলতে পারে যা isattyবৈধ মান ফিরিয়ে দেওয়ার উপর নির্ভর করে । তবে এটি ঠিক আছে বলে মনে হয় systemctlযেমন isattyএটির আউটপুটটি রঙ করা উচিত কিনা তা নির্ধারণের উদ্দেশ্যে একমাত্র ব্যবহৃত হয়েছিল।



1
টাওল্ফের উত্তরটি পড়ার পরে এবং ভোট দেওয়ার পরে (যা এটির চেয়ে অনেক ভাল) আমি এটিকে নীচু করে তুলতে যাচ্ছিলাম তবে এটি একটি হ্যাক খুব নিখুঁত তাই এর পরিবর্তে আমি কোনওরকম মিশ্র অনুভূতি নিয়ে এটিকে ভোট দিচ্ছি :)
পাইওটর ডব্রোগোস্ট

2

@ কার্লসির উত্তরের ভিত্তিতে , এখানে একটি স্ক্রিপ্ট রয়েছে যা উত্পন্ন করে এবং তারপরে রানটাইমের সময় পাঠাগারটি অন্তর্ভুক্ত করে:

#!/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 $@' - LD_PRELOAD="$isatty_so" "$@"

... কি হ্যাক
e
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.