Zsh এ LS_COLORS পরীক্ষা করা হচ্ছে


10

কয়েক বছর আগে আমি একটি আকর্ষণীয় কোড স্নিপেট পেয়েছি যা সেট আপ করা রঙ অনুসারে প্রতিটি ধরণের ফাইলের সাথে সম্পর্কিত রঙে মুদ্রণ করে LS_COLORS। দুর্ভাগ্যক্রমে, আমি আর লিঙ্কটি মনে করতে পারি না।

এখানে test_colors.shপ্রশ্নের স্নিপেট

eval $(echo "no:global default;fi:normal file;di:directory;ln:symbolic link;pi:named pipe;so:socket;do:door;bd:block device;cd:character device;or:orphan symlink;mi:missing file;su:set uid;sg:set gid;tw:sticky other writable;ow:other w\
ritable;st:sticky;ex:executable;"|sed -e 's/:/="/g; s/\;/"\n/g')                                                                                                                                                                            
{                                                                                                                                                                                                                                           
  IFS=:                                                                                                                                                                                                                                     
  for i in $LS_COLORS                                                                                                                                                                                                                       
  do                                                                                                                                                                                                                                        
    echo -e "\e[${i#*=}m$( x=${i%=*}; [ "${!x}" ] && echo "${!x}" || echo "$x" )\e[m"                                                                                                                                                       
  done                                                                                                                                                                                                                                      
}   

স্নিপেটটি দুর্দান্ত কাজ করে bash, তবে তা নয় এবং zshকেন তা আমি বলতে পারছি না। আমি এটি চালানোর সময় আমি zshনিম্নলিখিত ত্রুটিটি পাই:

> sh .test_colors.sh
.eval_colors:1: * not found
[00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.flac=01;35:*.mp3=01;35:*.mpc=01;35:*.ogg=01;35:*.wav=01;35:m

আপডেট (নভেম্বর 1, 2011)

আমি স্ক্রিপ্টটি নীচে @ স্টাফেন গিমেনেজ দ্বারা পরীক্ষা করেছি। আমি লক্ষ্য করেছি যে কয়েকটি চরিত্র সঠিকভাবে পালাতে পারে না বলে মনে হচ্ছে। কোন চিন্তা কেন?

উত্তর: @ স্টাফেন গিমেনেজের উত্তরের মন্তব্য দেখুন।

                                                      এখানে চিত্র বর্ণনা লিখুন

উত্তর:


7

অনেক পরিষ্কার পদ্ধতিতে zsh এর জন্য একই লিখিত:

#!/bin/zsh

typeset -A names
names[no]="global default"
names[fi]="normal file"
names[di]="directory"
names[ln]="symbolic link"
names[pi]="named pipe"
names[so]="socket"
names[do]="door"
names[bd]="block device"
names[cd]="character device"
names[or]="orphan symlink"
names[mi]="missing file"
names[su]="set uid"
names[sg]="set gid"
names[tw]="sticky other writable"
names[ow]="other writable"
names[st]="sticky"
names[ex]="executable"

for i in ${(s.:.)LS_COLORS}
do
    key=${i%\=*}
    color=${i#*\=}
    name=${names[(e)$key]-$key}
    printf '\e[%sm%s\e[m\n' $color $name
done

সংক্ষিপ্ততার জন্য আপনি সম্ভবত \nশেষে একটি স্থান দ্বারা প্রতিস্থাপন করতে চাইতে পারেন printf
স্টাফেন গিমেনেজ

ধন্যবাদ @ স্টাফেন গিমেনেজ আপনার স্ক্রিপ্টটি ব্যবহার করে কিছু অক্ষর মুদ্রণের সময় আমি যে সমস্যাটি পেয়ে যাচ্ছি তার সাথে আমি আমার ওপি আপডেট করেছি। যদিও এটি আপনার স্ক্রিপ্টের সাথে কঠোরভাবে সম্পর্কিত কিনা তা নিশ্চিত নয় (এটি আমার নিজস্ব টার্মিনাল হতে পারে?)
আমেলিও ওয়াজকেজ-রেইনা

1
@intrpc: চলমান zshহিসাবে shআপনার কিছু উপযুক্ততা মোড ব্যবহার করছেন। উভয় ক্ষেত্রেই হিসাবে আপনার স্ক্রিপ্টটি কল zsh ./test_color_schemeবা প্রায় উদ্ধৃতি চিহ্ন যোগ $colorএবং $name
স্টাফেন গিমেনেজ

@ স্টাফেইন গিমেনেজ: আমার এখানে সম্পর্কিত প্রশ্ন থেকে আমাকে এখানেই নির্দেশনা দেওয়া হয়েছিল: unix.stackex بدل . com / questions / 52659/… । আপনার সংক্ষিপ্তসারগুলির সম্প্রসারণ খুব সহায়ক। আমি তিনটি বর্ণমালা, have rs, caএবং mhযে উপরোক্ত অন্তর্ভুক্ত হয় না। দয়া করে আমাকে বলতে পারেন যে তাদের বিস্তৃতি কোথায় পাওয়া যাবে? ধন্যবাদ।
চন্দ্র

থেকে ব্যাখ্যা করা dircolors -p রুপি = রিসেট, CA = ক্ষমতা MH = বহু-hard_link
weldabar

3

আপনি অব্যাহতি প্রয়োজন =মধ্যে ${i%=*}কারণ অন্যথায় প্রত্যয় প্যাটার্ন =*ক্ষয়ের =সম্প্রসারণ , তাই =কমান্ড নাম হিসেবে ব্যাখ্যা করা হয়। এটি * not foundত্রুটির কারণ ।

Zsh পরিবর্তনশীল বিকল্পগুলিতে ডিফল্টরূপে শব্দগুলি বিভক্ত করে না, তাই $LS_COLORSএকক শব্দের কাছে প্রসারিত হয়। আছে forলুপের কোলোন চিহ্ন দ্বারা বিভাজিত অংশের উপর কাজ $LS_COLORS, ব্যবহার for i in $=LS_COLORS। অথবা zsh আরও idiomatically, ব্যবহার করবেন না IFSকিন্তু এর পরিবর্তে কিভাবে বিভক্ত করতে স্পষ্টভাবে উল্লেখ করুন: for i in ${(s.:.)LS_COLORS}

সিনট্যাক্স ${!x}অর্থ "ভেরিয়েবলের নাম যার নাম $x" বাশের জন্য নির্দিষ্ট। Zsh একটি সমতুল্য কনস্ট্রাক্ট রয়েছে P প্যারামিটার সম্প্রসারণ পতাকা : ${(P)x}


1
এই স্ক্রিপ্ট zsh তে কাজ করছে না এর জন্য আরও দুটি কারণ রয়েছে। এর জন্য কোনো স্বয়ংক্রিয় শব্দ-বিভাজন LS_COLORSএবং =চাহিদা প্রতিকল্পন ধরনে পলান করা হবে।
স্টাফেন গিমেনেজ

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