টি করতে পাইপ দেওয়ার সময় রঙগুলি সংরক্ষণ করুন


62
ls -l --color=auto | tee output.log

পাইপ / টি ছাড়া এটি রঙিন। আমি কীভাবে এটি তৈরি করতে পারি যাতে এটি ব্যবহারের সময় রঙিন থাকে tee(শুধুমাত্র স্ক্রিনে রঙিন হতে পারে, আমি লগগুলিতে রঙগুলি যত্ন করি না)।


উত্তর:


84

unbufferকোনও কমান্ডের আগে কেবল এটি সন্নিবেশ করান যাতে এটি মনে হয় যে এটি একটি ইন্টারেক্টিভ আউটপুটটিতে লিখছে এমনকি যদি এটি অন্য কোনও এক্সিকিউটেবলের মধ্যে পাইপ করে। এটি ক্ষেত্রে রঙ রক্ষা করবে ls

উদাহরণ স্বরূপ

unbuffer ls -l --color=auto | tee output.log

আপনি যদি ইতিমধ্যে এটি ইনস্টল না করে থাকেন তবে উবুন্টু এবং অন্যান্য ডেবিয়ান-ইশ লিনাক্স বিতরণগুলি করে আপনি ইনস্টল করতে পারেন unbuffer

sudo apt-get install expect-dev

6
আরেকটি সমাধান, যা কিছু ইনস্টল করার প্রয়োজন হয় না, এ stackoverflow.com/questions/3515208/...
Tgr

3
এর ফলে ফলাফল প্রাপ্ত ফাইলের রঙিন কোড (অবশ্যই) থাকে; ফাইলটি এমনভাবে ছাপানোর কোনও উপায় আছে যা রঙ কোডগুলি ব্যবহার করে এবং টার্মিনালে সঠিকভাবে রঙগুলি প্রদর্শন করে?
কাইল স্ট্র্যান্ড

2
ওহ, যা পাসওয়ার্ড এন্ট্রিগুলি আপনার পাসওয়ার্ডটি ক্লিয়ারটেক্সটে প্রদর্শন করে!
অ্যান্ডিডগ

@ টিজিআর ওএস এক্স-তে এই সমাধানটি আমার পক্ষে কাঁচা রঙের আউটপুট পাওয়ার চেষ্টা করে না xcodebuild- পরিবর্তে আমি কোনও রঙ ছাড়াই কাটা-আপ লাইন পেয়েছি। unbuffer xcodebuild | less -Rনির্দোষভাবে কাজ করেছেন, তবে।
স্লিপ ডি থম্পসন

2
আপনার expect-devপ্যাকেজ দরকার নেই । expectযথেষ্ট।
ইয়াজো

11

Ls বিকল্পটি ব্যবহার করুন --color=always

--color=auto কোনও পাইপলাইনে আউটপুট রঙ করবে না - সুস্পষ্ট কারণে।

মূল পৃষ্ঠাটি নিম্নলিখিত বলে:

--Color = অটো দিয়ে, রঙ কোডগুলি কেবল তখনই আউটপুট হয় যদি স্ট্যান্ডার্ড আউটপুট টার্মিনালের সাথে সংযুক্ত থাকে (tty)।


2
ঠিক আছে. এটি ব্যাখ্যা করে। তবে আমি কি এখনও কোনওভাবে পর্দার রং দেখতে পাচ্ছি? (এটি সর্বোপরি একটি টিটিওয়াই)। লগফাইলে তাদের রাখলে আমি আপত্তি করি না, তবে আমি অবশ্যই এটি আমার পর্দায় চাই।
পাওয়ে গোসিকি

আমি মনে করি আমি যথেষ্ট সাফ না হয়েছি। ls -lএকটি উদাহরণ ছিল। আমার কাছে সম্পূর্ণ আলাদা কমান্ড (হিরকু লগস) রয়েছে যা পাইপ করার সময় রঙ ফেলা করে tee। এবং আমি টি / পাইপ "ঠিক করতে / পরিবর্তন করতে" চাই, আমি যে আদেশটি চালাচ্ছি তা নয়।
পাওয়ে গোসিকি

1
@ পাওয়েল, আপনি সহজেই টি / পাইপে এটি ঠিক করতে পারবেন না কারণ টি / পাইপ এই রঙের কোডগুলি সরিয়ে দেয় না। সমস্যাটি হ'ল প্রাথমিক কমান্ডটি দেখে যে এটি টার্মিনালে লিখছে না। আপনার একটি সিউডো-টার্মিনাল দরকার যা পাইপের মতো কাজ করে তবে কোন আদেশগুলি টার্মিনাল হিসাবে দেখায়।
রেডগ্রিটিব্রিক

হুম ... যথেষ্ট ন্যায্য। আমার ধারণা আমার ঠিক এটি গ্রহণ করা দরকার যে এটি কেমন।
পাওয়ে গোসিকি

3
@ PawełGościcki এই উত্তরটি শুধুমাত্র সমস্যার সমাধান করে ls। আমার উত্তরটি দেখুন যা হিরকু লগ সহ সমস্ত প্রোগ্রামের জন্য সমস্যার সমাধান করে।
ইমন ও'ব্রায়ান-স্ট্রেন

3

আমি scriptগৃহীত উত্তরের মন্তব্যে প্রদত্ত সমাধানটি প্রসারিত করব । scriptআপনি কমান্ড থাকা প্রত্যাশিত প্যাকেজটি ইনস্টল করতে বা না করতে চাইলে ব্যবহার করা কার্যকর হতে পারে unbuffer

lsস্ট্যান্ডআউটে প্রিন্ট আউটপুট এবং রঙ কোড সহ ফাইল :

script -efq output.log -c "ls -l --color=auto"

কোথায় ( man script):

  -e, --return
         Return the exit code of the child process.  Uses the same
         format as bash termination on signal termination exit code is 128+n.
  -f, --flush
         Flush output after each write.  This is nice for telecooperation:
        one person does `mkfifo foo; script -f foo', and another can 
        supervise real-time what is being done using `cat foo'.
  -q, --quiet
         Be quiet (do not write start and done messages to either 
         standard output or the typescript file).

রঙ সহ আউটপুট ফাইলটি দেখুন :

less -r output.log

2
-e--returnউভয়ের জন্য প্রয়োজন নেই - হিসাবে একই -efqহয় --return --flush --quiet
নোল মেরস্ক

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