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


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.