কেন পসিক্স বাধ্যতামূলক ইউটিলিটিগুলি শেলের মধ্যে নির্মিত হয় না?


45

এই প্রশ্নের উদ্দেশ্য হ'ল একটি কৌতূহলের উত্তর দেওয়া, কোনও নির্দিষ্ট কম্পিউটিং সমস্যা সমাধান করা নয়। প্রশ্নটি হল: কেন পসিক্স বাধ্যতামূলক ইউটিলিটিগুলি সাধারণত শেল বাস্তবায়ন হিসাবে তৈরি হয় না?

উদাহরণস্বরূপ, আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা মূলত কয়েকটি ছোট পাঠ্য ফাইল এবং সেগুলি সঠিকভাবে ফর্ম্যাট করা আছে কিনা তা যাচাই করে তবে উল্লেখযোগ্য পরিমাণে স্ট্রিং ম্যানিপুলেশনের কারণে এটি আমার মেশিনে চালাতে 27 সেকেন্ড সময় নেয়। এই স্ট্রিং ম্যানিপুলেশন বিভিন্ন ইউটিলিটিগুলিকে কল করে হাজার হাজার নতুন প্রক্রিয়া তৈরি করে, অতএব স্বচ্ছলতা। আমি প্রায় নিশ্চিত যে যদি ইউটিলিটি কিছু, যথা তৈরী করা হয়েছে am grep, sed, cut, tr, এবং expr, তারপর স্ক্রিপ্ট এক সেকেন্ডের মধ্যে চালানো হবে বা তার কম (গ আমার অভিজ্ঞতার উপর ভিত্তি করে)।

মনে হচ্ছে অনেকগুলি পরিস্থিতি থাকবে যেখানে এই ইউটিলিটিগুলিতে বিল্ডিং শেল স্ক্রিপ্টের কোনও সমাধানের গ্রহণযোগ্য পারফরম্যান্স আছে কিনা তার মধ্যে পার্থক্য তৈরি করবে।

স্পষ্টতই, এই ইউটিলিটিগুলিকে অন্তর্নির্মিত না করার জন্য এটি বেছে নেওয়া হয়েছিল এমন একটি কারণ রয়েছে Maybe সম্ভবত সিস্টেম স্তরে ইউটিলিটির একটি সংস্করণ থাকা বিভিন্ন শেল দ্বারা সেই ইউটিলিটির একাধিক অসম সংস্করণ থাকা এড়ানো হতে পারে। এত নতুন নতুন প্রক্রিয়া তৈরির ওভারহেড রাখার জন্য আমি অন্য অনেক কারণের কথা সত্যিই ভাবতে পারি না এবং পসিক্স ইউটিলিটিগুলি সম্পর্কে যথেষ্ট পরিমাণে সংজ্ঞায়িত করে যে এটি প্রতিটি পসিক্স যতক্ষণ না পৃথক বাস্তবায়ন করতে সমস্যা বলে মনে হয় না so অনুবর্তী. কমপক্ষে এতগুলি প্রক্রিয়া থাকার অদক্ষতার মতো বড় সমস্যা নয়।


15
যদি 27 সেকেন্ড খুব ধীর হয় তবে আপনি পাইথন, পার্ল বা অন্য কোনও আধা-সংকলিত ভাষা ব্যবহার করতে পারেন। বিকল্পভাবে আপনার স্ক্রিপ্টের ধীর অংশগুলি পোস্ট করুন এবং উন্নতির জন্য জিজ্ঞাসা করুন। এটি এমন হতে পারে যে আপনি তিন বা চারটি কমান্ড ব্যবহার করছেন যেখানে একটি (দ্রুততর) কাজ করতে পারে।
রোয়াইমা

8
শেলগুলি ভারী শুল্কযুক্ত কাজের জন্য সত্যই তৈরি করা হয়নি, দুর্ভাগ্যক্রমে এবং যখন আপনি কেবল শেল স্ক্রিপ্ট নিয়ে পালিয়ে যেতে পারছিলেন তখন থেকে দুর্ভাগ্যক্রমে এবং পৃথিবী অনেকটাই পরিবর্তিত হয়েছে। আমি roaima সাথে একমত - যে যুক্তিসঙ্গত sysadmin এবং পাইথন বা পার্ল জন্য যেতে করা উচিত নয় সবকিছু হ্যান্ডেল করার শেল আশা
Sergiy Kolodyazhnyy

16
শেলটির প্রাথমিক উদ্দেশ্য হ'ল অন্যান্য প্রোগ্রামগুলি চালানো, সরাসরি ডেটা ম্যানিপুলেট করা নয়। বছরের পর বছর ধরে, তাদের দ্বারা সরবরাহ করা কিছু বাহ্যিক প্রোগ্রাম বা বৈশিষ্ট্যগুলি (গ্লোব্বিং, পাটিগণিত printf, ইত্যাদি) যখন যথেষ্ট পরিমাণে বিবেচিত হয়েছিল তখন শাঁসে সংযুক্ত করা হয়েছে।
চিপনার

8
আপনি যদি আপনার স্ক্রিপ্ট কোডেরভিউ.স্ট্যাকেক্সেক্সঞ্জ.কম এ পোস্ট করেন তবে আমি নিশ্চিত যে পর্যালোচকগুলি আপনার স্ক্রিপ্টটি দ্রুততর করার জন্য কিছু পরামর্শ দিতে পারে (বা কমপক্ষে এটি কেন শেলের পরিবর্তে পাইথন / ইত্যাদিতে লেখা উচিত) written
চিপনার

5
@Kyle: awkPOSIX মধ্যে একটি আবশ্যিক ইউটিলিটি (যেমন, খুব দ্রুত) স্ক্রিপ্ট বাস্তবায়ন যে আপনি অন্যথায় ব্যবহার বাস্তবায়ন হতে পারে, এবং বিশেষ করে ভাল উপযুক্ত sed, cut, tr, grep, এবং exprএকটি শেল স্ক্রিপ্ট হবে।
নামমাত্র প্রাণী

উত্তর:


11

শেল স্ক্রিপ্টগুলি সেই ধরণের গতির সাথে চলবে বলে আশা করা যায় না। আপনি যদি আপনার স্ক্রিপ্টের গতি উন্নত করতে চান তবে এটি পার্ল দিয়ে চেষ্টা করুন। যদি এটি এখনও খুব ধীর গতির হয়, তবে আপনাকে স্থিরভাবে টাইপ করা ভাষায় যেমন জাভা বা সিতে যেতে হবে, বা পার্লের জন্য সি মডিউল লিখতে হবে যা খুব ধীর অংশগুলি চালায়।

শেলটি প্রোটোটাইপিংয়ের প্রথম স্তর, যদি আপনি শেলটি দিয়ে ধারণাটি প্রমাণ করতে পারেন, তবে আরও ভাল স্ক্রিপ্টিং ভাষায় চলে যান যা আরও সীমানা যাচাই করতে পারে যা একর শেল নিতে পারে take

একটি ইউনিক্স ওএস অনেকগুলি ছোট প্রোগ্রাম অন্তর্ভুক্ত করবে বলে আশা করা হচ্ছে যা একটি বৃহত্তর চিত্র তৈরি করে ভাল সংজ্ঞায়িত কাজ করে। এটি বৃহত্তর প্রোগ্রামগুলিকে ভাগ করে দেওয়ার কারণে এটি একটি ভাল জিনিস। উদাহরণস্বরূপ কিমেলটি দেখুন এবং এটি সেন্ডমেলের সাথে তুলনা করুন। কিমেল অনেক প্রোগ্রাম দ্বারা তৈরি:

http://www.nrg4u.com/qmail/the-big-qmail-picture-103-p1.gif

নেটওয়ার্ক ডেমনটি অনুসন্ধান করা আপনাকে কিউ ম্যানেজারকে কাজে লাগাতে সহায়তা করবে না।


ওপি বিশেষত কোডের গতি বাড়ানোর বিষয়ে পরামর্শ চায়নি। প্রশ্নটি ছিল যে নির্দিষ্ট ইউটিলিটিগুলি বিল্ট-ইনগুলি cdবা এর মতো কেন নয় pwd
স্টিফেন সি

4
সত্য। উত্তরটি ছিল একচেটিয়া এবং বিভাগের মধ্যে পার্থক্য প্রকাশ করা এবং এই পক্ষে কোনও কারণ দেখানো।
এড নেভিল


1
@ স্টেফেনসি cdএকটি অন্তর্নির্মিত - এবং এটি আসলে হওয়া দরকার কারণ একটি সাবপ্রসেসে ওয়ার্কিং ডিরেক্টরি পরিবর্তন করা পিতামাতার প্রক্রিয়াগুলিকে প্রভাবিত করে না।
জোনাস

67

কেন পসিক্স বাধ্যতামূলক ইউটিলিটিগুলি শেল হিসাবে তৈরি হয় না?

পসিক্স অনুগত হওয়ার কারণে, একটি সিস্টেমকে স্ট্যান্ডঅ্যালন কমান্ড হিসাবে বেশিরভাগ ইউটিলিটি সরবরাহ করতে 1 টি প্রয়োজন

তাদের অন্তর্নির্মিত হওয়ার অর্থ হ'ল তারা শেলের ভিতরে এবং এর বাইরে দুটি পৃথক স্থানে থাকতে হবে। অবশ্যই, বিল্টিনে শেল স্ক্রিপ্ট র‌্যাপার ব্যবহার করে বাহ্যিক সংস্করণটি প্রয়োগ করা সম্ভব হবে, তবে এটি ইউটিলিটিগুলিকে কল করে নন শেল অ্যাপ্লিকেশনগুলির ক্ষতি করবে।

নোট করুন যে ব্যাসিবক্স অভ্যন্তরীণভাবে অনেক কমান্ড প্রয়োগ করে এবং নিজের লিঙ্কগুলি ব্যবহার করে স্ট্যান্ডেলোন ভেরিয়েন্ট সরবরাহ করে আপনার প্রস্তাবিত পথটি গ্রহণ করেছে। একটি বিষয় হ'ল কমান্ড সেটটি বেশ বড় হতে পারে, বাস্তবায়নগুলি প্রায়শই স্ট্যান্ডার্ডের একটি উপসেট হয় তাই অনুগত হয় না।

উল্লেখ্য যে অন্তত ksh93, bashএবং zshশেয়ার করা লাইব্রেরির থেকে পরিবর্তনশীল লোড builtins দৌড়ে শেল জন্য কাস্টম পদ্ধতি প্রদানের মাধ্যমে আরো যেতে। প্রযুক্তিগতভাবে, এরপরে কিছুই সমস্ত পসিক্স ইউটিলিটিগুলি প্রয়োগ এবং বিল্টিন হিসাবে উপলব্ধ করতে বাধা দেয় না।

অবশেষে, নতুন ওসি প্রসেসিং আধুনিক ওএসগুলির সাথে একটি দ্রুত অপারেশন হয়ে দাঁড়িয়েছে। আপনি যদি সত্যিই কোনও পারফরম্যান্স সমস্যার কারণে আঘাত পান তবে আপনার স্ক্রিপ্টগুলি দ্রুত চালিত করার জন্য কিছু উন্নতি হতে পারে।

1 পসিএক্স .1-2008

তবে সারণীর নিয়মিত বিল্ট-ইনগুলি সহ সমস্ত স্ট্যান্ডার্ড ইউটিলিটিগুলি , তবে বিশেষ বিল্ট-ইন ইউটিলিটিগুলিতে বর্ণিত বিশেষ বিল্ট-ইনগুলি এমনভাবে প্রয়োগ করা হবে না যাতে তাদের এক্সিকিউটিভ পরিবারের মাধ্যমে অ্যাক্সেস করা যায় they ফাংশন যেমন POSIX.1-2008 সিস্টেম ইন্টারফেস আয়তনের সংজ্ঞায়িত করা হয় এবং ঐ মান ইউটিলিটি এটি (env, খুঁজুন, সুন্দর, nohup, সময়, xargs) প্রয়োজন সরাসরি প্রার্থনা করা যেতে পারে।


4
এটি সঠিক উত্তর, তবে আমি কেবল এটিকে যুক্ত করব যেহেতু এই ইউটিলিটিগুলির ইন্টারফেসটি সাধারণত স্টিডিন / স্টেডআউট এর মাধ্যমে হয়, এমনকি যদি তাদের প্রত্যেককেও বাশ-এ অভ্যন্তরীণ রুটিন হিসাবে প্রয়োগ করা হয় তবে কার্যকরভাবে এখনও এটির প্রয়োজন হবে নিজেই কাঁটাচামচ করতে এবং পাইপলাইনে প্রতিটি কমান্ডের জন্য পাইপ তৈরি করতে, যাতে কেবলমাত্র প্রান্তিক লাভ হবে
চুনকো

2
@ চুনকো হ্যাঁ সাবহেলগুলি কাঁটাচামচ / এক্সিকিউড প্রক্রিয়াগুলির তুলনায় হালকা।
jlliagre

3
@ স্লেবেটম্যান আপনি আমার কথাটি অনুপস্থিত। লোগোগুলি লিনাক্সে চলছে কিনা তা নির্বিশেষে সাব-শেলগুলি থ্রেড বা সম্পাদিত প্রক্রিয়া নয়। সাবশেলগুলি কেবল তাদের পিতামাতার ক্লোন, একটি অনুসরণ fork না করে তৈরি করা হয়েছে exec; forkতুলনায় আজকাল খুব হালকা ওজনের অপারেশন exec
jlliagre

3
noforkব্যজিটবক্স বিল্টিনগুলি আমি বিল্টিনের চেয়ে 10x কম ওভারহেডের ক্রম হিসাবে পরিমাপ noexecকরেছি, যার পরিবর্তে একটি পৃথক বাইনারিটির কাঁটা + এক্সেকের চেয়ে 5x কম ওভারহেড ছিল। Unix.stackexchange.com/a/274322/29483 অনুসারে সংজ্ঞাগুলি আকর্ষণীয় যে ব্যস্তবক্সnofork সব কিছু করে না , যদিও আমি জানি কিছু ব্যস্তবক্স কোড মেমরি পরিষ্কার না করে সংক্ষিপ্ত করা হয়েছে এবং কেবল একটি স্বল্প-কালীন প্রক্রিয়া হওয়ার উপর নির্ভর করে।
উত্সবেদী

1
@ জেলিয়াগ্রে: লিনাক্সে একটি কাঁটাচামচ একটি প্রক্রিয়া তৈরি করে। আপনি যে বিষয়টি সম্ভবত অনুপস্থিত তা হ'ল লিনাক্সে তারা প্রক্রিয়াগুলি এতটাই অনুকূল করে ফেলেছে যে বিকাশকারীরা নির্ধারণ করেছেন যে আরও বেশি হালকা কিছু তৈরি করার কোনও সুবিধা নেই। মূলত লিনাক্সে একটি প্রক্রিয়া থ্রেডের মতো হালকা ওজনের হয়।
slebetman

9

থেকে BASH সহায়িকা ,

বিল্টিন কমান্ডগুলি পৃথক ইউটিলিটিগুলি সহ কার্যকারিতা অসম্ভব বা অসুবিধার জন্য বাস্তবায়নের জন্য প্রয়োজনীয়।

আমি নিশ্চিত যে আপনি শুনেছেন, ইউনিক্স দর্শনা একাধিক অ্যাপ্লিকেশনগুলির উপর অনেক বেশি নির্ভর করে যা সকলের কার্যকারিতা সীমিত। প্রতিটি অন্তর্নির্মিতটিতে এটি নির্মিত হওয়ার কারণ খুব ভাল কারণ রয়েছে else আমি মনে করি প্রশ্নগুলির একটি বেশি আকর্ষণীয় ক্লাসের, লাইন বরাবর হয় "কেন ঠিক হয় pwd বিল্ট-ইন?"


2
এক কথায়: মডুলারালিটি
পেশকে

2
/ বিন / pwd বিদ্যমান। আমি মনে করি cdযে এখানে একটি পৃথক সরঞ্জাম হিসাবে বাস্তবায়িত করা অসম্ভব এমন একটির আরও ভাল উদাহরণ হবে।
ওসকার স্কোগ

1
@ অস্কারস্কোগ এই বিষয়টি ছিল। cdঅন্তর্নির্মিত হতে হবে, pwdনা। তাহলে bashবাস্তবায়নকারীরা কেন এটি অন্তর্ভুক্ত করতে বেছে নিয়েছিল?
স্টিগ হেমার


@ স্টিটিহেমারের /bin/bashঅস্তিত্ব আছে, তবে এটি এখনও একটি বিল্টিন। Gnu.org/software/bash/manual/html_node/… এ বিল্টিনগুলির
স্টিফেন সি

8

এটিএন্ডটি-তে থাকা ছেলেরা নিজেরাই একই কথা জিজ্ঞাসা করেছিল

যদি আপনি এটিএন্ডটি সফ্টওয়্যার টুলকিটের ইতিহাসটি দেখুন (বর্তমানে মূল দলটি বাম থেকে গিথুবের উপর সুপ্ত পড়ে আছে) তবে এটি এটিএটিটিটি কর্ন শেল, ওরফে ksh93 দিয়ে ঠিক কী করেছিল।

পারফরম্যান্স সবসময় ksh93 রক্ষণাবেক্ষণকারীদের জন্য অনুপ্রেরণার অংশ ছিল এবং ksh তৈরি করার সময় আপনি প্রচলিত POSIX ইউটিলিটিগুলি ডায়নামিকভাবে লোড করা লাইব্রেরি হিসাবে বেছে নিতে পারেন। ডিরেক্টরিগুলির নামের মতো এই কমান্ডগুলিকে আবদ্ধ করে আপনি সেই ডিরেক্টরিটির নামের /opt/ast/binঅবস্থানের ভিত্তিতে কমান্ডের কোন সংস্করণ ব্যবহার করতে পারবেন তা নিয়ন্ত্রণ করতে পারেন $PATH

উদাহরণ:

cat chmod chown cksum cmp cp cut date expr fmt head join ln
mkdir mkfifo mktemp mv nl od paste rm tail tr uniq uuencode wc

সম্পূর্ণ তালিকাটি গিথুব অ্যাস্ট সংগ্রহস্থলটিতে পাওয়া যাবে ।

নোট করুন যে অ্যাস্ট সরঞ্জামগুলির বেশিরভাগের নিজস্ব প্রবাদ রয়েছে এবং আরও সাধারণ জিএনও প্রয়োগের চেয়ে দৃ strongly়ভাবে পৃথক হবে। এটিএন্ডটি রিসার্চ টিম অফিশিয়াল স্ট্যান্ডার্ডকে মেনে চলে, এটি যখন আপনি কোডটি ভাগ করে নিতে পারতেন না তখন আন্তঃআযোগিতা অর্জনের উপায় ছিল।


6

সুতরাং আমরা প্রতিটি নির্দিষ্ট আকাঙ্ক্ষা মেটাতে মূল সরঞ্জামটিকে অনুকূল করে তোলার ক্ষেত্রে মার্শাল সংস্থানগুলি করি নি। আমি অনুমান করি যে আমাদের যা বোঝাতে হবে তা হ'ল এই নির্দিষ্ট ইচ্ছাটি বাস্তবায়নে কত ব্যয় হবে।

পসিক্স ইউটিলিটিগুলি সম্পর্কে যথেষ্ট পরিমাণে সংজ্ঞা দেয় যে এটি বিভিন্ন বাস্তবায়ন করতে সমস্যা মনে হয় না।

এটি একটি খারাপ ধারণা :- পি।

পোস্ট-পসিক্স সিস্টেমগুলি ভাল কারণগুলির জন্য আরও শক্তিশালী এবং সুবিধাজনক হয়ে উঠতে থাকে; সত্য-পরবর্তী মান হিসাবে এটি আসলে কখনই ধরা দেয় না।

পুরাতন সিস্টেম ভি আরম্ভের বুট প্রক্রিয়াটিকে অনুকূল করে তুলতে উবুন্টু স্ক্রিপ্টগুলির জন্য একটি স্ট্রিপড ডাউন পসিক্স শেলটিতে স্যুইচ করার প্রচেষ্টা শুরু করেছিল। আমি বলছি না এটি ব্যর্থ হয়েছে, তবে এটি অনেকগুলি ত্রুটিগুলি ট্রিগার করেছিল যা পরিষ্কার করতে হয়েছিল: "বাশিজম", বৈশিষ্ট্যগুলি উপলভ্য ছিল /bin/shবলে ধরে নিয়ে স্ক্রিপ্টগুলি চলছিল bash

POSIX sh একটি ভাল সাধারণ উদ্দেশ্য প্রোগ্রামিং ভাষা নয়। এর প্রাথমিক উদ্দেশ্যটি ইন্টারেক্টিভ শেল হিসাবে ভাল কাজ করা। আপনার কমান্ডগুলি কোনও স্ক্রিপ্টে সংরক্ষণ করা শুরু করার সাথে সাথে আপনি সচেতন থাকুন যে আপনি কোনও ট্যুরিং তড়িতের কাছে যান । যেমন একটি সাধারণ পাইপলাইনের মাঝখানে ব্যর্থতা সনাক্ত করা সম্ভব নয় । bashএর set -o pipefailজন্য যোগ করা হয়েছে তবে এটি পসিক্সে নেই।

অনুরূপ দরকারী কিন্তু অমানুষিকৃত বৈশিষ্ট্যগুলি প্রায় প্রতিটি ইউটিলিটি এর চেয়ে জটিল দ্বারা সরবরাহ করা হয় true

আপনি যে শ্রেণীর টাস্কের রূপরেখা তৈরি করেছেন সেটির জন্য, আপনি আজক, পার্ল এবং আজকাল পাইথনের কাছে একটি মোটামুটি রেখা আঁকতে পারেন। বিভিন্ন সরঞ্জাম তৈরি করা হয়েছিল, এবং স্বাধীনভাবে বিকশিত হয়েছিল। আপনি কী আশা করতে পারেন যেমন জিএনইউ অ্যাওক একটি লিবিটিপোসিক্সেক্সটেডে গ্রাহিত হবে?

আমি বলছি না যে এখন আমাদের কাছে সার্বজনীন উন্নততর একটি পদ্ধতি রয়েছে যা আমি আপনাকে নির্দেশ করতে পারি। পাইথনের জন্য আমার একটা নরম জায়গা আছে। আওক আশ্চর্যজনকভাবে শক্তিশালী, যদিও আমি জিএনইউ আওকের সাথে সুনির্দিষ্ট কিছু বৈশিষ্ট্য দেখে হতাশ হয়েছি। তবে মুল বক্তব্যটি হ'ল পৃথকভাবে বৃহত সংখ্যক স্ট্রিং প্রক্রিয়াজাতকরণ (সম্ভবত ফাইলগুলির লাইন থেকে) পসিক্স শেলের কোনও নকশা লক্ষ্য ছিল না।


আমি অবাক হই যে শেলের সাথে যদি কোনও অসুবিধা হয় যা ধরে নিবে যে অবস্থানগুলির একটি কনফিগারযোগ্য তালিকা থেকে চালানো কোনও কমান্ডটি বিল্ট-ইন হিসাবে বিবেচিত হবে যেখানে শেলটি কমান্ডটি সম্পর্কে সমস্ত কিছু বোঝে? কোনও স্ক্রিপ্ট যদি cat -@fnord fooশেলটি সম্পাদন করে তবে সিদ্ধান্ত নেওয়া উচিত যেহেতু এটি জানে না যে -@এর আসল কমান্ডটি চাওয়ার প্রয়োজন কী , তবে কেবল cat <foo >barশেলটি দেওয়া হলে অন্য কোনও প্রক্রিয়া চালানো উচিত নয়।
সুপারক্যাট

1
@ সুপের্যাট জটিলতা
সোর্সজেডি

2

এখানে আরও প্রশ্ন রয়েছে: আপনি এটি কোন শেলটি তৈরি করবেন?

বেশিরভাগ ইউনিক্স / লিনাক্স সিস্টেমে একাধিক পৃথক শেল থাকে যা স্বতন্ত্রভাবে বিকশিত হয় (sh / bash / korn / ???)। আপনি যদি শেলটিতে সরঞ্জামগুলি তৈরি করেন তবে প্রতিটি শেলের জন্য আপনি এই সরঞ্জামগুলির একটি পৃথক বাস্তবায়ন শেষ করবেন। এটি ওভারহেডের কারণ হতে পারে এবং আপনি কোন শেলটি ব্যবহার করতে চেয়েছিলেন তার উপর নির্ভর করে আপনি গ্রেপ যেমন উদাহরণস্বরূপ বিভিন্ন বৈশিষ্ট্য / বাগ সহ শেষ হতে পারেন।


zsh আজকাল কয়েকটি চেনাশোনাতে বেশ জনপ্রিয়। csh / tcsh এর followingতিহাসিকভাবে একটি বৃহত্তর অনুসরণ রয়েছে, তবে আমি মনে করি না যে আপনি আজ এটির অনেক কিছুই দেখতে পাচ্ছেন। এবং কম পরিচিত শেলগুলির পুরো বান্ডিলটি রয়েছে ...
সিভিএন

Modularity। বিল্টিনগুলির সাথে, প্রতিবার সেই বিল্টিনগুলির মধ্যে একটিতে পরিবর্তন আনার সময় আপনাকে শেলটি পুনরায় সংকলন বা পুনরায় ইনস্টল করতে হবে।
can-ned_food

1

অনেকেই ভাল উত্তর দিয়েছেন। আমি কেবল এই উত্তরগুলির প্রশংসা করতে চাই। আমি ইউনিক্স দর্শনটি মনে করি যে কোনও সরঞ্জামের একটি জিনিস করা উচিত এবং এটি ভালভাবে করা উচিত। যদি কেউ একটি সমস্ত পরিবেষ্টনকারী সরঞ্জাম তৈরি করার চেষ্টা করে তবে ব্যর্থতার আরও অনেক বেশি জায়গা। কার্যকারিতা এইভাবে সীমাবদ্ধ করে এমন একটি সরঞ্জাম সেট তৈরি করে যা নির্ভরযোগ্য।

এছাড়াও, বিবেচনা করুন, যদি সেড বা গ্রেপের মতো কার্যকারিতা শেলটিতে তৈরি করা হত, আপনি যখন চান তখন কমান্ড লাইন থেকে প্রার্থনা করা কি এত সহজ হবে?

সমাপ্তির সময়, বিবেচনা করুন, আপনি বাসে থাকতে চান এমন কিছু কার্যকারিতা BASH এ রয়েছে । উদাহরণস্বরূপ, BASH- এ আরআর ম্যাচিংয়ের সক্ষমতা = ~ বাইনারি অপারেটর ব্যবহার করে প্রয়োগ করা হয়েছে (আরও তথ্যের জন্য ম্যানুয়াল পৃষ্ঠায় শেল ব্যাকরণ দেখুন, বিশেষত, যদি [[]] যদি নির্মাণের আলোচনার রেফারেন্স হয় )। খুব তাড়াতাড়ি উদাহরণ হিসাবে বলুন যে আমি 2 টি হেক্স ডিজিটের জন্য একটি ফাইল অনুসন্ধান করছি:

while read line; do
    if [[ $line =~ 0x[[:xdigit:]]{2} ]]; then
        # do something important with it
    fi
done < input_file.txt

সেড-এর মতো কার্যকারিতা হিসাবে একই ম্যান পেজের এক্সপেনশন শিরোনামে প্যারামিটার এক্সপেনশনের নিচে দেখুন । আপনি করতে পারেন এমন প্রচুর জিনিস আপনি দেখতে পাবেন যা সেডের স্মরণ করিয়ে দেয়। আমি প্রায়শই টেক্সটে কিছু প্রতিস্থাপনের ধরন পরিবর্তন করতে সেড ব্যবহার করি। উপরের বিল্ডিং বন্ধ:

# this does not take into account the saving of the substituted text
# it shows only how to do it
while read line; do
    ${line/pattern/substitution}
done < input_file.txt

শেষ পর্যন্ত যদিও উপরেরটি "ভাল" চেয়ে ভাল?

grep -E "[[:xdigit:]]{3}" input_file.txt
sed -e 's/pattern/substitution/' input_file.txt

সর্বশেষ প্রশ্নের বিপরীতে একটি যুক্তি unix.stackexchange.com/questions/169716/…
পিএইচকে

1

এটি আমার ধারণা, একটি accidentতিহাসিক দুর্ঘটনা।

১৯ UN০-এর দশকের শেষের দিকে এবং ১৯ 1970০-এর দশকের গোড়ার দিকে যখন ইউএনআইএক্স তৈরি হয়েছিল, কম্পিউটারগুলির আজকের মতো মেমোরি ছিল না। এই সময়ে শেল বিল্টিন হিসাবে এই সমস্ত কার্যকারিতা বাস্তবায়ন করা সম্ভব হত, কিন্তু স্মৃতি সীমাবদ্ধতার কারণে তাদের যে পরিমাণ কার্যকারিতা কার্যকর করতে পারে বা মেমরি এবং / অথবা অদলবদল ট্র্যাশিংয়ের ঝুঁকি থেকে সীমাবদ্ধ থাকতে হত সমস্যা।

অন্যদিকে, প্রদত্ত কার্যকারিতাটি পৃথক প্রোগ্রাম হিসাবে বাস্তবায়ন করে এবং দুটি প্রয়োজনীয় সিস্টেমকে যথাসম্ভব হালকা হিসাবে নতুন প্রক্রিয়া শুরু করার আহ্বান জানিয়ে, তারা এমন একটি স্ক্রিপ্টিং পরিবেশ তৈরি করতে পারে যাতে এই সমস্যাগুলি নেই এবং এটি এখনও যুক্তিসঙ্গতভাবে চলে দ্রুততা.

অবশ্যই, একবার এই জিনিসগুলি পৃথক প্রক্রিয়া হিসাবে প্রয়োগ করা হলে লোকেরা সেগুলি এমন প্রোগ্রাম থেকে শুরু করবে যা শাঁস নয় , এবং তারপরে তাদের সেভাবেই থাকতে হবে, বা হঠাৎ এই সমস্ত সফ্টওয়্যারটি ভাঙতে শুরু করে।

এর অর্থ এটি নয় যে আপনি দু'বার কিছু কার্যকারিতা বাস্তবায়ন করতে পারবেন না, এবং প্রকৃতপক্ষে কিছু শাঁস এমন কিছু কার্যকারিতা বাস্তবায়ন করে যা শেল বিল্টিন হিসাবে বহিরাগত প্রোগ্রাম বলে মনে করা হয়; উদাহরণস্বরূপ, বাশ echoএকটি বিল্টিন হিসাবে কমান্ডটি প্রয়োগ করে , তবে একটিও আছে/usr/bin/echo

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