ওপি বিকল্প কারণগুলি অনুপযুক্ত বলে জানিয়েছে এমন কয়েকটি কারণে বাস্তবে কোনও ভিত্তি নেই। এখানে, আমি ওপির কৌশল 4 ব্যবহার করে কী ধরণের প্রভাবগুলি দেখায়:
বেশিরভাগ বিতরণে, (সাধারণ) বা (ওপেনসুএসই, সম্ভবত অন্যরা) grepইনস্টল করা থাকে এবং ডিফল্টটিতে এর আগে বা থাকে । এর অর্থ হ'ল আপনি যদি এটি দিয়ে তৈরি করেন/bin/usr/binPATH/usr/local/bin/bin/usr/bin/usr/local/bin/grep
#!/bin/sh
exec /bin/grep --color=auto "$@"
যেখানে /bin/shএকটি POSIX সামঞ্জস্যপূর্ণ আপনার বন্টন, সাধারণত ব্যাশ বা ড্যাশ দ্বারা উপলব্ধ শেল হয়। যদি grepথাকে /usr/bin, তবে এটি তৈরি করুন
#!/bin/sh
exec /usr/bin/grep --color=auto "$@"
এই স্ক্রিপ্টের ওভারহেড ন্যূনতম। execবিবৃতি মানে স্ক্রিপ্টটি অনুবাদক দ্বারা প্রতিস্থাপিত হয় grepবাইনারি; এর অর্থ grepহ'ল মৃত্যুদন্ড কার্যকর করার সময় শেলটি স্মৃতিতে থাকে না । সুতরাং, একমাত্র ওভারহেড হ'ল স্ক্রিপ্ট ইন্টারপ্রেটারের একটি অতিরিক্ত সম্পাদন, অর্থাৎ প্রাচীর ঘড়ির সময় একটি ছোট বিলম্ব ten বিলম্বিতা মোটামুটি ধ্রুবক (কেবলমাত্র পৃষ্ঠার ক্যাশে রয়েছে grepএবং shতা ইতিমধ্যে এবং আই / ও ব্যান্ডউইথ কতটা উপলভ্য রয়েছে তার উপর নির্ভর করে) এবং এটি কতক্ষণ grepচালায় বা কত ডেটা প্রক্রিয়া করে তার উপর নির্ভর করে না ।
সুতরাং, যে দীর্ঘতরতা, মানে ওভারহেডটি মোড়ক স্ক্রিপ্ট দ্বারা যুক্ত হয়?
এটির জন্য, উপরের স্ক্রিপ্টটি তৈরি করুন এবং চালান
time /bin/grep --version
time /usr/local/bin/grep --version
আমার মেশিনে, প্রাক্তনটি 0.005s রিয়েল টাইম নেয় (প্রচুর সংখ্যক রানের জুড়ে), যেখানে আধুনিক সময়টি 0.006s সময় নেয়। সুতরাং, আমার মেশিনে মোড়ক ব্যবহারের ওভারহেড প্রতি অনুরোধে 0.001s (বা তার চেয়ে কম) হয়।
এটা তুচ্ছ।
আমি এ সম্পর্কে "নোংরা" কিছুই দেখতে ব্যর্থ হই কারণ অনেকগুলি সাধারণ অ্যাপ্লিকেশন এবং ইউটিলিটি একই পন্থা ব্যবহার করে। আপনার মেশিনে এ জাতীয় তালিকা দেখতে /binএবং /usr/binকেবল চালান
file /bin/* /usr/bin/* | sed -ne 's/:.*shell script.*$//p'
আমার মেশিন অন, উপরে আউটপুট অন্তর্ভুক্ত egrep, fgrep, zgrep, which, 7z, chromium-browser, ldd, এবং xfig, আমি বেশ প্রায়ই ব্যবহার করে। আপনার পুরো বিতরণটি "রেন্ডার স্ক্রিপ্ট" এর উপর নির্ভর করার জন্য "নোংরা" না বিবেচনা না করা থাকলে আপনার এ জাতীয় মোড়ক স্ক্রিপ্টগুলি "নোংরা" বিবেচনা করার কোনও কারণ নেই।
সমস্যার ক্ষেত্রে যেমন একটি র্যাপার স্ক্রিপ্টের কারণ হতে পারে:
শুধুমাত্র মানুষের ব্যবহারকারী (যেমন স্ক্রিপ্ট থেকে ভিন্ন), grep সংস্করণ যে রঙ সমর্থন যদি আউটপুট টার্মিনাল হয় ডিফল্ট, তারপর মোড়কের স্ক্রিপ্ট নামকরণ করা যাবে ব্যবহার করে থাকেন colorgrepবা cgrepবা যাই হোক না কেন ওপি হইয়া সূচিত করা হবে।
এটি সমস্ত সম্ভাব্য সামঞ্জস্যের বিষয়গুলি এড়িয়ে চলে, কারণ আচরণের ক্ষেত্রে grepকোনও পরিবর্তন হয় না।
grepমোড়ক স্ক্রিপ্টের সাহায্যে বিকল্পগুলি সক্ষম করা , তবে এমন কোনও উপায়ে যাতে কোনও নতুন সমস্যা এড়ানো যায়:
সমর্থন না করা GREP_OPTSথাকলেও আমরা কাস্টমকে সমর্থন করার জন্য সহজেই মোড়ক স্ক্রিপ্টটি পুনরায় লিখতে পারি GREP_OPTIONS(এটি ইতিমধ্যে অবনমিত রয়েছে)। এইভাবে ব্যবহারকারীরা কেবল export "GREP_OPTIONS=--color=auto"তাদের প্রোফাইলে যুক্ত বা অনুরূপ করতে পারেন । /usr/local/bin/grepতারপর
#!/bin/sh
exec /bin/grep $GREP_OPTIONS "$@"
মনে রাখবেন চারপাশে কোনও উদ্ধৃতি নেই $GREP_OPTIONS, যাতে ব্যবহারকারীরা একাধিক বিকল্প নির্দিষ্ট করতে পারেন।
আমার সিস্টেমে, খালি time /usr/local/bin/grep --versionদিয়ে GREP_OPTIONSবা সাথে চালানো GREP_OPTIONS=--color=auto, মোড়ক স্ক্রিপ্টের পূর্ববর্তী সংস্করণের মতোই দ্রুত; অর্থাত্ সাধারণত প্লেইনের তুলনায় এক মিলিসেকেন্ড বেশি সময় নেয় grep।
এই শেষ সংস্করণটি হ'ল আমি ব্যক্তিগতভাবে ব্যবহারের জন্য প্রস্তাব দিই।
সংক্ষেপে, ওপির কৌশল 4:
aready grepবিকাশকারীদের দ্বারা সুপারিশ করা হয়
বাস্তবায়নের জন্য তুচ্ছ (দুটি লাইন)
তুচ্ছ ওভারহেড রয়েছে (এই বিশেষ ল্যাপটপে প্রতিটি অনুরোধের জন্য এক মিলিসেকেন্ড অতিরিক্ত বিলম্বিতা; প্রতিটি মেশিনে সহজেই যাচাই করা যায়)
GREP_OPTSসমর্থন যুক্ত করে এমন একটি মোড়ক স্ক্রিপ্ট হিসাবে প্রয়োগ করা যেতে পারে (অবহেলিত / অসমর্থিত প্রতিস্থাপন করতে GREP_OPTIONS)
(হিসাবে colorgrep/ cgrep) প্রয়োগ করা যেতে পারে যা স্ক্রিপ্ট বা বিদ্যমান ব্যবহারকারীদের মোটেই প্রভাবিত করে না
কারণ এটি এমন একটি প্রযুক্তি যা লিনাক্স বিতরণে ইতিমধ্যে ব্যাপকভাবে ব্যবহৃত হয়, এটি একটি সাধারণ কৌশল এবং "নোংরা" নয়।
যদি একটি পৃথক মোড়ক ( colorgrep/ cgrep) হিসাবে প্রয়োগ করা হয় তবে এটি নতুন সমস্যা তৈরি করতে পারে না কারণ এটি grepআচরণে মোটেই প্রভাব ফেলে না । GREP_OPTSসমর্থন যুক্ত করে GREP_OPTS=--color=autoএমন একটি মোড়ক স্ক্রিপ্ট হিসাবে প্রয়োগ করা হলে , ব্যবহারের ঠিক একই ঝুঁকি রয়েছে (বিদ্যমান স্ক্রিপ্টগুলির সাথে অস্থির সমস্যা) যা মূল প্রবাহকে ডিফল্ট হিসাবে যুক্ত করে --color=auto। সুতরাং, এটি "এটি সমাধানের চেয়ে আরও বেশি সমস্যা তৈরি করে" মন্তব্য সম্পূর্ণ ভুল: কোনও অতিরিক্ত সমস্যা তৈরি হয় না।