গ্রেপ ব্যবহার করার সময় পর্দায় অদ্ভুত প্রতীক?


12

./trans ... কমান্ড আউটপুট এস্কেপ কোডগুলি দেখায়

এটার কারণ কি হতে পারে, কোন ধারণা আছে? গ্রেপ ব্যবহার না করে, কেবলমাত্র স্টাফের ডিসপ্লেতে আইএসও কোড এবং খালি স্থান রয়েছে।

সফটওয়্যার ব্যবহার করা হয়েছে

COMMAND: ./trans --id --input /path/to/txt | grep ISO | grep [a-z]

root@box /test # alias grep
alias grep='grep --color=auto'
root@box /test # type grep
grep is aliased to `grep --color=auto'

সাধারণ আউটপুট:

পাঠযোগ্য পাঠ্য এবং ইউআরএল সহ ট্রান্স কমান্ড আউটপুট


কোনও চিত্র সংযুক্ত করার পরিবর্তে আউটপুটটি পেস্ট করুন। যাতে অন্যরা তাদের সিস্টেমে একই প্রজনন করতে পেস্ট করা কমান্ডটি পুনরায় ব্যবহার করতে পারে।
থিশি

9
@ থুশি এই ক্ষেত্রে একটি স্ক্রিনশট উপযুক্ত, কারণ তারা এখানে অনুপস্থিত গ্লাইফ চিহ্নগুলি পেস্ট করতে সক্ষম হবে না।
স্পারহাক

আপনি যা করতে পারেন সম্পাদন করা কমান্ডের স্ক্রিনশট মধ্যে ছাড়া চিহ্ন চালানো greps, এবং ফল alias grepএবং type grep?
মাইকেল হোমার

উত্তর:


28

স্ক্রিনশটটি ম্যাঙ্গেলড এএনএসআই রঙের কোডগুলি প্রদর্শিত হচ্ছে যা পাঠ্য রেন্ডারিং নিয়ন্ত্রণ করে। বোল্ড / উজ্জ্বল পাঠ্যটি অনুক্রমের সাথে উত্পাদিত হয় ␛[1m, যা সাধারণত আপনার টার্মিনাল দ্বারা ব্যাখ্যা করা হয় এবং সরাসরি স্ক্রিনে প্রদর্শিত হয় না: এটি কেবল পরবর্তী বিটটিকে উজ্জ্বল করে তোলে makes আন grepপেড আউটপুটটির স্ক্রিনশটটি প্রতিটি লাইনের লেবেল এবং মানগুলির মধ্যে রঙের পার্থক্য দেখায়, সুতরাং আসল আউটপুট এগুলি ব্যবহার করে।

দেখা যাচ্ছে যে এই ক্রমটি আপনার চূড়ান্তভাবে ভেঙে গেছে grep, যা কোডের "মি" এর সাথে মেলে (যেহেতু এটি একটি চিঠি [a-z]) এবং এটি নিজেই লাল রঙে হাইলাইট করার চেষ্টা করেছিল। এটি আংশিক অব্যাহতি ক্রম পিছনে ফেলেছে, যা আপনার টার্মিনালটি প্রক্রিয়া করতে পারে না।

পালানোর চরিত্রটি হ'ল ইউ + 001 বি, যা অজানা-চরিত্রের বাক্সগুলিতে রেকর্ড করা হেক্সাডেসিমাল সংখ্যা। যা প্রদর্শিত হয় তা হল পালানো (বাক্স), ক [, ক 1, একটি লাল যার mপরে প্রত্যাশিত মিলে যাওয়া পাঠ্য "ইঞ্জ" এবং তার পরে "22" ("সাধারণ রঙ এবং তীব্রতা" এর সংখ্যাসূচক কোড) এর পরে একই ঘটনা ঘটে।


ভাঙা আউটপুট সত্যই:

␛ [1 ␛ [31m মেং ␛ [22m ␛ [22 ␛ [31m মি ␛ [22m 

যেখানে ␛[31mটেক্সট লাল এবং তোলে ␛[22mএটি ফিরিয়ে সাদা করিয়া, উভয় দ্বারা সন্নিবেশিত grepপ্রায় mমূল পাঠ্যে অক্ষর। মূলটি কেবলমাত্র:

 ␛ [1 মি Eng ␛ [22m 

যা কেবল উজ্জ্বল " eng" এবং তারপরে স্বাভাবিক পাঠ্যে ফিরে আসে।

আপনি আপনার চূড়ান্ত grepরূপান্তর করে grep --color=alwaysএবং এতে পাইপ দিয়ে এটি পরীক্ষা করতে পারেন hexdump, যা সমস্ত অপ্রিনিতযোগ্য অক্ষর এবং আপনার টার্মিনাল দ্বারা ব্যাখ্যা করা একটিতে প্রদর্শিত হবে।


আপনি এটি কয়েকটি উপায়ে মোকাবেলা করতে পারেন। একটি হ'ল grepএই মুহুর্তের জন্য আপনার ওরফে ছাড়া ব্যবহার করা :

./trans --id --input /path/to/txt | grep ISO | \grep [a-z]

ব্যাকস্ল্যাশ অস্থায়ীভাবে উপনামটি এড়িয়ে যায় এবং grepসরাসরি চলে।

আরেকটি হ'ল আসল কমান্ড থেকে এএনএসআই কোডগুলি সরিয়ে ফেলা, যার জন্য এই প্রশ্নে কিছু পরামর্শ রয়েছে :

./trans --id --input /path/to/txt | perl -pe 's/\e\[[\d;]*m//g' | grep ISO | grep [a-z]

তবুও অন্য বিকল্পটি হল শেষে একটি বহিরাগত পাইপ যুক্ত করা:

./trans --id --input /path/to/txt | grep ISO | grep [a-z] | cat

কারণ চূড়ান্ত grepফলাফলটি সরাসরি টিটিওয়াইয়ের পক্ষে নয়, তবে catপাইপের মাধ্যমে এটি রঙিন হাইলাইটিং সন্নিবেশ করবে না।

সম্ভবত সর্বোত্তম বিকল্পটি হ'ল অনুবাদক শেলটি নিজের টার্মিনালটিতে না থাকলে তার নিজস্ব আউটপুটে টার্মিনাল কন্ট্রোল সিকোয়েন্সগুলি প্রথম স্থানে ব্যবহার বন্ধ করে দেয়। এটি আপনার লেখক (গুলি) এর কাছে আপনার কাছ থেকে একটি বাগ রিপোর্ট সঠিকভাবে জড়িত করবে এবং শেলের ansi()ক্রিয়াকলাপে অনুবাদ করার জন্য একটি কোড ফিক্স জড়িত করবে , তবে একটি এটি কিছুটা চাপিয়ে দিতে পারে:

TERM=dumb ./trans --id --input /path/to/txt | grep ISO | grep [a-z]

এটি dumbঅনুবাদ শেলের পরিবেশে টার্মিনাল ধরণের পাস করে , যা এটি কমপক্ষে ECMA-48 রঙ সমর্থন না করে স্বীকৃতি দেয়। (দুঃখের বিষয়, অনুবাদ শেলটি টার্মিনফো ব্যবহার করে না এবং কেবল নিজের কোডে হার্ডওয়ায়ারগুলি বোঝে যে টার্মিনাল এটি বোঝে এবং এটি যে নিয়ন্ত্রণ সিকোয়েন্সগুলি ব্যবহার করে তা ব্যবহার করে))


বাহ, আমি নিজের দ্বারা এবং এটির মতো জায়গা ছাড়াই কখনই এটি ডিবাগ করতে সক্ষম হব না, তাই আপনাকে ধন্যবাদ!
ফ্রিডো

অপরাধী আইএমও সহজেই একটি ভাঙা GREP_COLORবা GREP_COLORSপরিবেশগত পরিবর্তনশীল হতে পারে যা কেবলমাত্র সংখ্যার চেয়ে সম্পূর্ণ এসজিআর এস্কেপ সিকোয়েন্সগুলি ধারণ করে।
উদাহরণস্বরূপ

বাহ, অনেক সমাধান। আপনি --color=noচূড়ান্ত গ্রেপতে যোগ করতে পারেন (বা এটি প্রয়োগ করুন TERM=dumb)
অ্যাঞ্জেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.