কীভাবে পালানোর ক্রমগুলি সহ নিয়ন্ত্রণের অক্ষরগুলি মুদ্রণ করা যায়?


9

আমি টিপুট ব্যবহার করে রঙিন বর্ণকে সংজ্ঞায়িত করেছি

red=$(tput setaf 1)

আমার প্রোগ্রামে সতর্কতা রঙিন করতে। এটি সূক্ষ্মভাবে কাজ করে:

printf '%sfail\n' "$red"
# prints 'fail' in red

তবে একবারে আমি পালানোর ক্রমটি প্রিন্ট করতে চাই, এরকম কিছু:

\ ই [31mfail

আমি এই কিভাবে করব? আমি জানি যে প্রিন্টফের একটি %qপতাকা রয়েছে তবে এটি অন্যদের যে জিনিসটি আমি চাই না তা এড়িয়ে যায়।


আপনি কি রূপান্তর করতে চান এটির কেবল ESC (0x1b) অক্ষর \E, বা অন্যান্য নিয়ন্ত্রণের অক্ষর?
— স্টাফেন চেজেলাস

উত্তর:


10

আপনি মত শোনায় তাদের আক্ষরিক মুদ্রণ বিপরীত চাই, যদি আপনি চান ঐ পালাবার অক্ষর মত একটি মুদ্রণযোগ্য বর্ণনামূলক ফর্ম রূপান্তরিত \Eবা \033, ^[...

যদি এটা শুধু চট্টগ্রাম সিটি কর্পোরেশন (0x1b) চরিত্র আপনি রূপান্তর করতে চান \E, তাহলে সঙ্গে ksh93, zshবা bash(সাধারণত একই বেশী যে যে অ-মানক সমর্থন %q), আপনি করতে পারেন:

printf '%s\n' "${red//$'\e'/\\E}"

বা পাইপ টু sed $'s/\e/\\\\E/g'

অ-গ্রাফিকাল অক্ষরকে রূপান্তর করতে আরও সাধারণ পদ্ধতির জন্য আপনি ব্যবহার করতে পারেন:

$ printf %s "$red" | od -A n -vt c # POSIX
 033   [   3   1   m
$ printf %s "$red" | sed -n l # POSIX
\033[31m$
$ printf '%s\n' "${(qqqq)red}" # zsh
$'\033[31m'
$ printf '%s\n' "$red" | cat -vt # some cat implementations
^[[31m
$ printf %s "$red" | uconv -x ':: [:Cc:]; ::Hex;' # ICU tools
\u001B[31m
$ printf %s "$red" | uconv -x ':: [:Cc:]; ::Name;' # ICU tools
\N{<control-001B>}[31m

5

ব্যবহারের od, hexdump, xxd, অথবা পাঠযোগ্য আকারে বাইনারি ডেটা প্রিন্ট অনুরূপ। উদাহরণ স্বরূপ:

$ tput setaf 1 | od -c
0000000 033   [   3   1   m
0000005

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