পুনর্নির্দেশের সময় কেন ঝাঁকুনি অনুজ্ঞাপূর্ণ পাঠ্য উত্পন্ন করে?


20

আমি একটি কমান্ডের আউটপুট একটি ফাইলে সংরক্ষণ করার চেষ্টা করছি। আদেশটি হ'ল:

clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt

তবে ফলাফল যখন আউটপুট.টিএসটি ফাইল খুলবে (জিবিত এবং উবুন্টুতে জেডিট দ্বারা) এটি আমাকে দেয়:

[0;1;32mTranslationUnitDecl[0m[0;33m 0x4192020[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x4192558[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __int128_t[0m [0;32m'__int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192270[0m [0;32m'__int128'[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x41925b8[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __uint128_t[0m [0;32m'unsigned __int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192290[0m [0;32m'unsigned __int128'[0m
...

এটি কখন সত্যই দেখতে হবে:

TranslationUnitDecl 0x4e46020 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x4e46558 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x4e46270 '__int128'
|-TypedefDecl 0x4e465b8 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x4e46290 'unsigned __int128'
...

আমি ভেবেছিলাম এটা এনকোডিং একটি সমস্যা হতে পারে, আমি ফাইল, এর এনকোডিং চেক করা file -bi output.txtযা আউটপুট text/plain; charset=us-ascii

আমি ভেবেছিলাম সম্ভবত আমি যদি এনকোডিংটি utf-8 এ পরিবর্তন করি তবে সমস্যাটি ঠিক হয়ে যাবে তাই আমি এটি চেষ্টা করেছিলাম:

clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt

কিন্তু এটি কোনও পার্থক্য করেনি।

এই সমস্যাটি সমাধান করার জন্য আমি কী করতে পারি?

সমস্যাটি এমন নয় যে আমি সিনট্যাক্স-হাইলাইটেড সংস্করণটি দেখার চেষ্টা করছি (এটি প্রথম স্থানে দেখার ক্ষেত্রে আমার কোনও সমস্যা হয়নি)। আমাকে একটি ফাইলের সাথে ঝাঁকুনির দ্বারা উত্পন্ন এএসটি সংরক্ষণ করতে হবে এবং তারপরে পার্স করা উচিত, যা রঙের তথ্যটি রেখে দেয় তাতে সমস্যা হবে।


4
এটি লক্ষণীয় যে >আউটপুট উত্পন্ন করে না, এটি কেবলমাত্র শেলটির জন্য নির্ধারণ করে যা আপনি আপনার clangকমান্ডের আউটপুট প্রদত্ত ফাইলটিতে টার্মিনালের পরিবর্তে স্থাপন করতে চান। এর পরে আপনি এটিকে এমনভাবে দেখছেন যা রঙের কোডগুলিকে একইভাবে অনুমতি দেয় না। আপনি যদি catফাইলটিতে থাকেন তবে এটি টার্মিনালটি গ্রহণ করার সাথে সাথে কাজ করবে এবং আপনি পতাকাটি lessদিয়ে এটি করতে পারেন -R
সম্মিচ



@ স্কট - আমি আউটপুটটি দেখার চেষ্টা করছি না, আমি রঙিন তথ্য না রেখে ফাইলটিতে এটি সংরক্ষণ করার চেষ্টা করছি, যা ফাইলকে অকারণে জটিল করে দেবে।
মাউ

উত্তর:


54

কোডপেজ / এনকোডিংয়ের সাথে এর কোনও সম্পর্ক নেই। আপনার আউটপুট সাধারণ পাঠ্য নয়। এটির মতো সিকোয়েন্স রয়েছে [0;1;32m। এই স্ট্রিংগুলি (এটির প্রত্যেকটির আগে একটি, দেখানো হয়নি, [পলায়ন] অক্ষর রয়েছে) টার্মিনালকে নির্দেশ দেওয়া হয় টেক্সট গা bold়, তির্যক, বিভিন্ন বর্ণ ইত্যাদিতে প্রদর্শন করা এটি সমর্থন করে।

আউটপুটটি সুন্দর করার চেষ্টা না করার জন্য ঝাঁকুনির বলার একটি বিকল্প থাকতে হবে, তবে পরিবর্তে সরল পাঠ্য ব্যবহার করুন। ম্যানুয়ালটি পরীক্ষা করুন। (আমার কোনও কাজ নেই, সুতরাং সঠিক আদেশটি কী হবে তা আমি আপনাকে বলতে পারি না))


15
ধন্যবাদ, কারণ ছিল। আমি চেষ্টা করেছিলাম clang -Xclang -ast-dump -fsyntax-only -fno-color-diagnostics main.cpp > output.txtযা আমাকে সঠিক আউটপুট দিয়েছে।
maou

9
বিকল্প সমাধান, যদি কলং যুক্তিসঙ্গতভাবে ভাল আচরণ করা হয় (যা এটি স্পষ্টভাবে নয়, যদি এটি চেকিং ছাড়াই টার্মিনাল কোডগুলি প্রেরণ করে isatty(stdout)) সেট TERMকরতে হয় (যেমন) dumb
টবি স্পিড

4
পুনরায় "এটির ফলে আউটপুট পড়া সহজ হয়, যদি আপনার টার্মিনাল এটি সমর্থন করে" ", এটি অবশ্যই একটি মতামত। রঙিন অ্যাপটি যখন আপনার কালো পটভূমিতে
গা dark়

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

1
@ n0rd আদর্শভাবে হ্যাঁ, তবে আমি যথেষ্ট পরিস্থিতি দেখেছি যেখানে রিসাইরেক্ট আউটপুটটিতে ইসট্টি () কে মিথ্যা দেওয়া হয়নি। এবং কিছু ক্ষেত্রে কোনও ব্যবহারকারী হয়ত পালানোর কোডগুলি পুনঃনির্দেশিত (যেমন পরে দেখতে বা অন্য সিস্টেমে নেটকাট দেখতে পাইপটি কেবল 2 ব্যবহারের ক্ষেত্রে দিতে পারে) চাইবে give সুতরাং অনুমান করার চেষ্টা করুন, তবে ব্যবহারকারী যদি ভুলটি অনুমান করেন তবে অনুমানকে ওভাররাইড করে এটি চালু / বন্ধ করার অনুমতি দিন। এটি সেরা সমাধান হবে।
টনি

12

বিকল্পভাবে, আউটপুট থেকে রঙ অপসারণের পরিবর্তে, আপনি এর কাঁচা বিকল্প ব্যবহার করে আপনার টার্মিনালে রঙিন আউটপুট দেখতে পারেন less

less -r output.txt

2

সেই চরিত্রগুলি যেমন [0;33mআমার কাছে টার্মিনাল আউটপুট নিয়ন্ত্রণের মতো দেখায়। এগুলি পালানোর ক্রমগুলির একটি অংশের অংশ যা টার্মিনালে পাঠ্যে রঙ প্রয়োগ করার জন্য প্রায়শই ব্যবহৃত হয়। এর মতো কাঁচা অবস্থায় এটি প্রায়শই ব্যাশ প্রম্পটে রঙ প্রয়োগ করতে ব্যবহৃত হয় - আমি .bashrcআমার সমস্ত মেশিনে বছরের পর বছর ধরে যা ব্যবহার করছি তা এখানে :

export PS1='\[\033[1;33m\]\u\[\033[1;35m\]@\[\033[1;32m\]\h\[\033[0;36m\]\w\[\033[1;37m\]\$ \[\033[0;37m\]'

(বেশিরভাগ এটি কুরুচিপূর্ণ মনে হয়, তবে আমি এটি পছন্দ করি)।

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


13
[...] "আমার কাছে বাশের আউটপুট নিয়ন্ত্রণের মতো দেখায়" তাদের বাশের সাথে কিছুই করার নেই। এটি তাদের জন্য টার্মিনাল।
glglgl

1
@Glglgl যেমন বলেছে যে তারা বাশ-নির্দিষ্ট নয়, তারা একটি xtermসম্পর্কিত বিষয়। লিড বিকাশকারী দ্বারা এই দুর্দান্ত উত্তর দেখুন xterm
বিড়াল

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