আমি কীভাবে সিনট্যাক্স থেকে উত্সাহিত ফাইলগুলি পরীক্ষা করা বন্ধ করব?


9

আমার কাছে একটি ফাইলের মধ্যে নিম্নলিখিত কোড রয়েছে যা zsh এবং ব্যাশ উভয় দ্বারা উত্সাহিত।

if test $SHELLNAME = zsh ; then
    lss() { l -l ${1:-.}/*(s,S,t); }
    laf() { l ${1:-.}/.*(.); }
    lad() { l -d ${1:-.}/.*(/); }
    lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }
fi

SHELLNAMEহয় zshযদি শেল zsh এবং bashযদি শেল ব্যাশ হয়।

উপরের প্রতিটি ফাংশনটিতে কোড রয়েছে যা zsh এর সাথে কাজ করে তবে বাশ নয়।

আমি যখন এই ফাইলটি উত্স করি, আমি নিম্নলিখিত ত্রুটিগুলি পাই।

bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: `     lss() { l -l ${1:-.}/*(s,S,t); }'

এই মুহুর্তে, আমি evalব্যাশের সিনট্যাক্স পরীক্ষাটি বাইপাস করতে ব্যবহার করছি ।

if test $SHELLNAME = zsh ; then
    # Using eval makes sure bash can't try to syntax-check these functions.
    eval 'lss() { l -l ${1:-.}/*(s,S,t); }'
    eval 'laf() { l ${1:-.}/.*(.); }'
    eval 'lad() { l -d ${1:-.}/.*(/); }'
    eval 'lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }'
fi

এই সমস্যার আরও ভাল সমাধান কি আছে? (সম্ভবত এটি ব্যবহার করে না eval)

bash  zsh 

উত্তর:


14

আপনার কেবলমাত্র একটি needভাল দরকার।

[ -n "$ZSH_VERSION" ] &&
  eval '
    lss() l -l ${1:-.}/*(s,S,t)
    laf() l ${1:-.}/.*(.)
    lad() l -d ${1:-.}/.*(/)
    lsw() l -ld ${1:-.}/.*(R,W,X.^ND/)
  '

(নোট যে zshবিপরীত bashসমর্থন বোর্ন ফাংশন সিনট্যাক্স করে)

বা:

[ -n "$ZSH_VERSION" ] && . /dev/fd/3 3<< '# End of zsh specific section'
  lss() l -l ${1:-.}/*(s,S,t)
  laf() l ${1:-.}/.*(.)
  lad() l -d ${1:-.}/.*(/)
  lsw() l -ld ${1:-.}/.*(R,W,X.^ND/)
# End of zsh specific section

তবে আমি এটির সাথে একমত হতে চাই slmযে zshপৃথক ফাইলটিতে নির্দিষ্ট বাক্য গঠন কেবলমাত্র উত্স দ্বারা উত্সাহিত zshহবে।


আমি কেবল কথায় 8-) কী ভাবতে পারি তা কোড দেওয়ার জন্য ধন্যবাদ)
slm

15

পরিবর্তে বাশকে সিনট্যাক্স চেক না করার চেষ্টা করুন, কেন আপনার স্ক্রিপ্টটি এই স্রোসিংয়ের কাজটি করছে না যখন এটি সঠিক শেল দ্বারা ডাকা হচ্ছে it


ফাইলটি বাশ এবং zsh উভয় দ্বারা উত্সাহিত। আমি যদিও zsh- নির্দিষ্ট অংশগুলি তাদের নিজের ফাইলে বিভক্ত করার কথা ভাবছি।

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