কম পাইপযুক্ত রঙের আউটপুট সংরক্ষণের জন্য একটি টিটিওয়াই অনুকরণ করুন


5

আপনি যখন lessকোনও কিছু পাইপ করেন , প্রোগ্রামটি সাধারণত রঙ কোডগুলি বাতিল করে দেয় কারণ এটি কোনও টিটিওয়াইয়ের আউটপুট নয়। সুতরাং --color=alwaysএটির কাজ করার জন্য আপনাকে বিকল্পগুলি যুক্ত করতে হবে।

ls -l --color=always | less
grep -R asdf --color=always | less

সবচেয়ে খারাপ এটি হ'ল কখনও কখনও জিনিসগুলি সেই বিকল্পটি সমর্থন করে না, তাই কোনও পাইপে রঙিন আউটপুট জোর করার কোনও উপায় নেই।

কোনও টিটিওয়াই কম অনুকরণ করার কোনও (অপেক্ষাকৃত) সহজ উপায় আছে যাতে --color=alwaysজিনিসগুলি যখন পাইপ করা হয় তখন আমাকে প্রতিটি প্রোগ্রামের জন্য নির্দিষ্ট করতে না হয় এবং যখন সম্ভব হয় তখন এটি স্বয়ংক্রিয়ভাবে রঙের আউটপুট প্রদর্শন করে?


1
আমি কখনও টিটিওয়াইয়ের কথা স্মরণ করি না যা কালো ছাড়াও মুদ্রিত ছিল।
ড্যানিয়েল আর হিক্স

উত্তর:


17

এটি lessপরিবর্তন করার প্রয়োজন নেই। আপনার অন্যান্য প্রোগ্রামগুলির আউটপুট একটি পাইপে পুনঃনির্দেশিত করা হচ্ছে। এই প্রোগ্রামগুলি সনাক্ত করে যে তাদের আউটপুট কোনও টিটিআইয়ের কাছে প্রেরণ করা হচ্ছে না এবং তারা তাদের রঙিন অক্ষম করে। পাইপে পুনঃনির্দেশিত হওয়া সত্ত্বেও উত্স প্রোগ্রামগুলি তাদের আউটপুট রঙ করার জন্য বিশেষ কিছু করার সাথে আপনি আটকে আছেন।

আমি মনে করি যে প্রোগ্রামগুলি --color = সর্বদা বিকল্প সমর্থন করে না তার জন্য আমার কাছে একটি সমাধান রয়েছে। unbufferকমান্ড একটি Pty তৈরি করে এবং যে Pty তার যুক্তি প্রোগ্রামের আউটপুট পাঠায়, তাই যুক্তি প্রোগ্রামটি ভাবে তার আউটপুট একটি TTY এবং এটি রং করতে যাচ্ছে।

আমি নিম্নলিখিত হিসাবে একটি পরীক্ষা হিসাবে চেষ্টা করেছি এবং এটি কার্যকর। আমি এমন কোনও প্রোগ্রামের কথা ভাবতে পারি নি যা ডিফল্টভাবে তাদের আউটপুটকে রঙ করে।

$ unbuffer ls --color=auto | cat

এছাড়াও, রঙটি প্রদর্শনের জন্য আপনার -rবিকল্পটি ব্যবহার lessকরতে হবে না? আমি এটি চেষ্টা করেছিলাম:

$ unbuffer ls --color=auto | less -r

3

ফ্রিবিএসডি-তে আপনি পারবেন:

env CLICOLOR_FORCE=yes ls -l | less -R

অথবা আপনি বিকল্পগুলি সেট (ওভাররাইড) করতে পারেন (csh / tcsh):

alias less less -R
setenv CLICOLOR_FORCE yes
setenv  LS_COLORS "no=00:fi=00:di=01;36:ln=01;37;44:pi=40;33:so=01;35"
setenv  LS_COLORS "$LS_COLORS":"bd=40;33;01:cd=40;33;01:or=40;31;01"
setenv  LS_COLORS "$LS_COLORS":"ex=01;32;40:*.tar=01;31:*.tgz=01;31"
setenv  LS_COLORS "$LS_COLORS":"*.arj=01;31:*.taz=01;31:*.lzh=01;31"
setenv  LS_COLORS "$LS_COLORS":"*.zip=01;31:*.z=01;31:*.Z=01;31"
setenv  LS_COLORS "$LS_COLORS":"*.gz=01;31:*.deb=01;31:*.jpg=01;35"
setenv  LS_COLORS "$LS_COLORS":"*.gif=01;35:*.bmp=01;35:*.ppm=01;35"
setenv  LS_COLORS "$LS_COLORS":"*.tga=01;35:*.xbm=01;35:*.xpm=01;35"
setenv  LS_COLORS "$LS_COLORS":"*.tif=01;35:*.mpg=01;37:*.avi=01;37"
setenv  LS_COLORS "$LS_COLORS":"*.gl=01;37:*.dl=01;37:*.tex=01;35"
setenv  LS_COLORS "$LS_COLORS":"*.ps=01;35"
setenv  LS_COLORS "$LS_COLORS":"*.php=01;33"
setenv  LS_COLORS "$LS_COLORS":"*.sh=00;31"
setenv  LS_COLORS "$LS_COLORS":"*.txt=01;37:*.conf=01;37:*.config=01;37"
setenv  LSCOLORS GxExcxdxCxegedabagacad

~ / .cshrc এ


2

প্রোগ্রামটি isattyরঙটি ব্যবহার করবে কি না তা নির্ধারণ করতে ব্যবহার করে
তবে এটির একটি উপায় হ'ল এটি ব্যবহার করে ওভাররাইড করাLD_PRELOAD

ইসটিটির একটি সংস্করণ তৈরি করুন যা সর্বদা সত্য হয়।

echo "int isatty(int x) { (void) x; return 1 ;}" > isatty_override.c

এটি সংকলন করুন এবং একটি ভাগ করা লাইব্রেরি তৈরি করুন।

gcc -c -fPIC isatty_override.c -o isatty_override.o
gcc isatty_override.o -shared -o isatty_override.so

ভাগ করা লাইব্রেরি লোড করতে LD_PRELOAD পরিবেশ পরিবর্তনশীল ব্যবহার করুন।

LD_PRELOAD=./isatty_override.so ls -l | less


0

কোনও পিটিআই কম বরাদ্দ করার কোনও উপায় নেই, যদিও, প্রোগ্রামগুলি যে আউটপুট রঙের সিদ্ধান্ত নেওয়ার জন্য টিটিওয়াইয়ের উপর নির্ভর করে বা ম্যানুয়ালি বলার প্রয়োজন নেই programs দুঃখিত।


0

ফ্রিবিএসডি-এর ব্যাশ শেলের উপর, কম ব্যবহার করে রঙিন পাইপিংয়ের জন্য নিম্নলিখিতগুলি করুন ...

$ export CLICOLOR_FORCE=yes
$ ls -G | less -R

আপনি আপনার .bashrcবা রফতানি কমান্ড যুক্ত করতে পারেন .bash_profile

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