আমি ভাবছি যে sh
প্রতীকী এর সাথে যুক্ত হওয়ার বিন্দুটি dash
কী? আমি বুঝতে পারি যে dash
এটির চেয়ে দ্রুত হওয়া উচিত bash
, তবে আসল sh
শেলটি কেন উপস্থিত নেই তা আমি অনিশ্চিত sh
।
বা কিছু হলে কেন sh
সংযুক্ত নেই bash
?
আমি ভাবছি যে sh
প্রতীকী এর সাথে যুক্ত হওয়ার বিন্দুটি dash
কী? আমি বুঝতে পারি যে dash
এটির চেয়ে দ্রুত হওয়া উচিত bash
, তবে আসল sh
শেলটি কেন উপস্থিত নেই তা আমি অনিশ্চিত sh
।
বা কিছু হলে কেন sh
সংযুক্ত নেই bash
?
উত্তর:
"কেন মূল আসল শেলটি উপস্থিত নেই" এর সংক্ষিপ্ত উত্তর sh
হ'ল কোনও আসল শে নেই।
ঠিক আছে, আছে, এটি থম্পসন শেল । সংস্করণ 1-এ আমরা বিশেষভাবে পুনর্নির্দেশ এবং পাইপগুলিতে ( রেকর্ডিকাল ইউনিক্সের ইতিহাসে ডেনিস রিচির কাগজটি পড়ুন) কিছু বৈশিষ্ট্য উপস্থিত ছিল । পরবর্তী সংস্করণগুলিতে ব্যাকগ্রাউন্ড এক্সিকিউশন &
, গ্লোববিং (কোনও বাহ্যিক প্রোগ্রামের সাথে বাস্তবায়িত করা) এবং উদ্ধৃতকরণের কিছু ফর্মগুলির মতো বৈশিষ্ট্যগুলি যুক্ত করা হয়েছে তবে এতে ভেরিয়েবল বা নেস্টেড নিয়ন্ত্রণ কাঠামো নেই। শর্তাবলী এবং লুপগুলি বাহ্যিক প্রোগ্রামগুলির মাধ্যমে সরবরাহ করা হয়েছিল if
(যা একটি শর্ত এবং একটি কমান্ডকে আর্গুমেন্ট হিসাবে গ্রহণ করেছিল) এবং goto
(যা স্ক্রিপ্ট ফাইলটিতে তার পিতামাতার ফাইলের অবস্থান পরিবর্তন করে কাজ করেছিল)।
1979 সালে, ইউনিক্স ভি 7-তে , থম্পসন শেলটি বোর্ন শেল/bin/sh
দ্বারা প্রতিস্থাপিত হয়েছিল । প্রথম প্রকাশে ইতিমধ্যে আজকের ড্যাশগুলিতে উপস্থিত অনেকগুলি বৈশিষ্ট্য ছিল এবং পরবর্তী সংস্করণগুলি আরও অনেকগুলি চালু করেছিল । কয়েক বছর পরে, কর্ন শেল একটি ক্রমবর্ধমান বৈশিষ্ট্য সেট সহ দৃশ্যে এসেছিল; অনেক ইউনিক্স রূপগুলি নাম অনুসারে এটি ইনস্টল করে ।ksh
1992 সালে, পসিক্স ন্যূনতম sh
বৈশিষ্ট্যগুলির সেটকে কোড করে যা মূলত বোর্ন প্লাস কয়েকটি জিনিস ছিল। যে কোনও সিস্টেম যা নিজেকে "ইউনিক্স" বলে অভিহিত করত তাদের কমপক্ষে এই বৈশিষ্ট্যগুলি প্রয়োগ করতে হয়েছিল। বাণিজ্যিক ইউনিক্স সিস্টেমে সাধারণত পোশিক্স শ হিসাবে ksh ব্যবহার করা হত তবে কয়েকটি (যেমন OSF / 1 ) এর নিজস্ব ছিল।
বোর্ন শেল বা কর্ন শেল উভয়ই মোটামুটি সাম্প্রতিক অবধি উন্মুক্ত উত্স ছিল না, সুতরাং 1990 এর দশকের মাঝামাঝি সময়ে যখন লিনাক্স বিশ্ব গঠনের সূচনা করেছিল, তখন সেগুলি পাওয়া যায় নি। /bin/sh
অন্য কিছু হতে হবে। অধিকাংশ Linux ডিস্ট্রিবিউশনের জন্য গিয়েছিলাম ব্যাশ থেকে একটি শেল গনুহ প্রকল্পের যে স্ক্রিপ্টিং বৈশিষ্ট্য পদ বোর্ন এবং Korn থেকে এর মধ্যে হতে সেদিকেই ঝুঁকেছে, এবং আরো অনেক ইন্টারেক্টিভ ব্যবহারের জন্য হয় বেশী ভালো)। শুধুমাত্র টেকসই বিকল্প pdksh ( "পাবলিক ডোমেইনে Korn থেকে শেল"), একটি বিনামূল্যে ছিল (এখন বিরত, কিন্তু বেঁচে mksh , যা সক্রিয়ভাবে বিকশিত ), কিন্তু আমি pdksh ব্যবহার করে একটি লিনাক্স ডিস্ট্রিবিউশন মনে করতে পারছি না/bin/sh
, কেন জানি না, আমি অনুমান করি কারণ লিনাক্স বিতরণগুলি সর্বদা জিএনইউ / লিনাক্স বিতরণ ছিল, মূলত এমন কোনও সরঞ্জামের জিএনইউ সংস্করণ পাঠানো হয়েছিল যার জন্য একটি জিএনইউ সংস্করণ ছিল।
এছাড়াও অনেকগুলি ওপেন সোর্স বাস্তবায়ন sh
নামে পরিচিত ছিল "ছাই", বিশেষত উল্লেখযোগ্যভাবে অ্যালকুইস্ট শেল , তবে তারা খুব অসম্পূর্ণ ছিল, কিছু পসিক্স বৈশিষ্ট্য যা লোকেরা ব্যবহার করতে চেয়েছিল তার অভাব ছিল। একজন প্রোগ্রামার যিনি ডেবিয়ান রক্ষণাবেক্ষণকারী ছিলেন, হারবার্ট শো , এটি পসিক্স অনুগত করার জন্য ছাই বাড়িয়েছিলেন। শেষ পর্যন্ত তার সংস্করণটির নাম বদলে দেওয়া হয়েছিল, এবং /bin/sh
ব্যাশের পরিবর্তে এটি দেবিয়ানে তৈরি করার জন্য কিছুটা চাপ দেওয়া হয়েছিল । উবুন্টু শুরু আউট সামনে ডেবিয়ান ধারাক্রমে আচরণ bashisms (ইন ব্যাশ-নির্দিষ্ট কার্যকারিতা ব্যবহার শুরু #!/bin/sh
যেমন হরফ) বাগ । উভয়ই পরে পরিবর্তন করেছে ( উবুন্টু 10.১০, দেবিয়ান কেবল ২০০৯ সালে ( এটি লেনির জন্য একটি লক্ষ্য ছিল তবে স্যুইচটি কেবলমাত্র ল্যানি রিলিজের পরে তৈরি হয়েছিল, অর্থাত্ স্ক্রিজে)।
একটি প্রধান ড্যাশ যেমন বদলে ব্যাশ ব্যবহার করার জন্য কারণ হিসাবে /bin/sh
যে এটা উল্লেখযোগ্যভাবে আরো দ্রুত। এটি উবুন্টুর পক্ষে বিশেষত গুরুত্বপূর্ণ ছিল, যা প্রথম থেকেই বুটের সময়কে সংক্ষিপ্ত রাখতে সচেষ্ট ছিল। ড্যাশ ব্যাশের চেয়ে কম মেমরি ব্যবহার করার ঝোঁকও দেয় যা অন্তর্নিহিত প্রোগ্রামটি প্রস্থান করার সময় কিছুটা পরিষ্কার করার জন্য প্রায় থাকা র্যাপার স্ক্রিপ্টগুলির জন্য কিছুটা গুরুত্বপূর্ণ। ড্যাশের আরও একটি সুবিধা হ'ল এটি কেবল লাইবসি (মূল সিস্টেমের গ্রন্থাগার) এর উপর নির্ভর করে যেখানে বাশ টার্মিনাল সমর্থন লাইব্রেরিগুলিতেও নির্ভর করে (এটি তাদের ছাড়াই শুরু করতে পারে না এমনকি স্ক্রিপ্ট চালানোও যায় না); এর অর্থ হ'ল ড্যাশগুলির একটি ভাঙ্গা সিস্টেমে কাজ চালিয়ে যাওয়ার আরও ভাল সুযোগ রয়েছে।
একবিংশ শতাব্দীর কোনও সময়ে, কর্ন শেল ওপেন সোর্সে গিয়েছিল, এবং বোর্ন শেলের ওপেন সোর্স সংস্করণগুলি উপস্থিত হয়েছিল (পুরানো সংস্করণ, কারণ বছর আগে বিকাশ বন্ধ ছিল)। লিনাক্স বিশ্বে ড্যাশ এবং বাশ খুব দৃly়ভাবে জড়িত ছিল যাতে তারা কোনও গ্রহণযোগ্যতা অর্জন করতে পারে, বিশেষত বোর্ন শেল যেহেতু এর মূল্য আজ কেবল isতিহাসিক is ড্যাশ বাস্তুচ্যুত বাশের কারণ এটির সুস্পষ্ট সুবিধাগুলি ছিল, তবে অন্য প্রতিযোগীদের কারও মতোই কোনও সিদ্ধান্তমূলক সুবিধা নেই /bin/sh
।
system
অ্যাপ্লিকেশনগুলিতে সমস্ত কল (3) যে প্রভাবশালী) এটি কার্যকর করে for
গতি এবং POSIX সম্মতি (অন্য কথায়, বহনযোগ্যতা) প্রধান কারণ। মনে রাখবেন এটি /bin/sh
সিস্টেম স্ক্রিপ্টগুলির জন্য বোঝানো হয়েছে, যা উবুন্টু এবং / অথবা অন্যান্য সিস্টেমগুলির পুরানো সংস্করণ থেকে এসেছে বা নাও পারে।
অবশ্যই, এর চকচকে বৈশিষ্ট্যগুলি bash
আমাদের ব্যবহারকারীদের জন্য ব্যবহার করার জন্য দুর্দান্ত, তবে যখন পরিবেশে চলমান জিনিসটি আসে যেখানে আপনাকে বেশ কয়েকটি বিভিন্ন সার্ভার / সিস্টেম পরিচালনা করতে হয় - পসিক্সের সাথে সামঞ্জস্যপূর্ণ শেল থাকা পুরো পার্থক্য তৈরি করে। বিশেষত, যদি আপনি একটি নতুন সিসাদমিন এবং অনেক স্ক্রিপ্ট সহ উত্তরাধিকার সূত্রে প্রাপ্ত পরিবেশ হন।
আসল বোর্ন শেলটি কেন উপস্থিত নেই, এটি সহজ - এটি মূলত এটিএনটিটি বেল ল্যাবগুলির মালিকানাধীন মালিকানাধীন পণ্য।
এছাড়াও, উবুন্টু উইকির সম্পর্কে এটি সম্পর্কে একটি স্পষ্ট ব্যাখ্যা আছে:
কেন এই পরিবর্তন করা হয়েছিল? ডিফল্ট শেলটি স্যুইচ করার প্রধান কারণ ছিল দক্ষতা। বাশ ইন্টারেক্টিভ ব্যবহারের জন্য উপযুক্ত একটি দুর্দান্ত পূর্ণ বৈশিষ্ট্যযুক্ত শেল; আসলে এটি এখনও ডিফল্ট লগইন শেল। তবে ড্যাশের সাথে তুলনা করে শুরু করা এবং পরিচালনা করা এটি বরং বড় এবং ধীর। উবুন্টু বুট প্রক্রিয়াটির অংশ হিসাবে প্রচুর শেল দৃষ্টান্ত শুরু করা হয়েছে। / বিন / ড্যাশের অধীনে স্পষ্টভাবে চলার জন্য তাদের প্রত্যেককে পৃথকভাবে পরিবর্তিত করার পরিবর্তে, এমন একটি পরিবর্তন যার জন্য উল্লেখযোগ্য চলমান রক্ষণাবেক্ষণের প্রয়োজন হবে এবং ঘনিষ্ঠ মনোযোগ না দেওয়া হলে তা পুনরায় চাপিয়ে দেওয়া দায়বদ্ধ হবে, উবুন্টু মূল উন্নয়ন দলটি অনুভব করেছিল যে কেবল পরিবর্তন করা সবচেয়ে ভাল was ডিফল্ট শেল উবুন্টু 10.১০ এর বুটের গতির উন্নতিগুলি প্রায়শই ভুলভাবে আপস্টার্টকে দায়ী করা হয়েছিল, এটি ভবিষ্যতে ইনি সিস্টেমের উন্নয়নের জন্য একটি দুর্দান্ত প্ল্যাটফর্ম তবে উবুন্টু in এ। 10 কেবলমাত্র ছোট আচরণগত পরিবর্তন সহ সিস্টেম ভি সামঞ্জস্যতা মোডে প্রাথমিকভাবে চলছিল। এই উন্নতিগুলি মূলত পরিবর্তিত / বিন / শের কারণে হয়েছিল।
এবং এখানে বহনযোগ্যতা সম্পর্কে একটি নোট:
দেবিয়ান নীতি ম্যানুয়ালটি দীর্ঘদিন ধরে নির্দেশ দিয়েছে যে "দোভাষী হিসাবে '/ বিন / শ' উল্লেখ করে এমন শেল স্ক্রিপ্টগুলিতে কেবল পসিক্স বৈশিষ্ট্যই ব্যবহার করা উচিত"; বাস্তবে উবুন্টু প্রকল্প শুরুর আগে থেকেই এই প্রয়োজনীয়তা কার্যকর ছিল। তদুপরি, যে কোনও শেল স্ক্রিপ্ট যেগুলি ইউনিক্স সিস্টেমগুলি যেমন বিএসডি বা সোলারিসের কাছে পোর্টেবল হতে পারে বলে প্রত্যাশা করা হয়েছে তা ইতিমধ্যে এই প্রয়োজনটিকে সম্মানিত করেছে। সুতরাং, আমরা অনুভব করেছি যে এই পরিবর্তনের সামঞ্জস্যতা প্রভাবটি সর্বনিম্ন হবে।
dash
যে প্রয়োজন নেই বৈশিষ্ট্যকে সমর্থন POSIX
?
জিএনইউ / লিনাক্স বিতরণগুলিতে, "আসল /bin/sh
" আসলে বাশ।
জিএনইউ জিপিএল-এর অধীনে বোর্ন-জাতীয় শেল চেয়েছিল, তাই তারা /bin/sh
বোর্নের পরিবর্তে বাশকে বেছে নিয়েছিল , যা জিপিএল-লাইসেন্সবিহীন ছিল না। আধুনিক লিনাক্স ডিস্ট্রস এই সিদ্ধান্তটিকে উত্তরাধিকার সূত্রে পেয়েছে যে এটি /bin/sh
বাশ হওয়ার জন্য একটি ডিফ্যাক্টোর মান হয়ে দাঁড়িয়েছে । মূল বোর্ন শেল ("sh") অন্যান্য নন-লিনাক্স ইউনিক্সগুলিতে ব্যবহৃত হয়েছে, এমনকি সোলারিস 10 হিসাবে সম্প্রতি ব্যবহার করা হয়েছে, তবে লিনাক্স বিতরণে এটি কখনও প্রধান ভিত্তি ছিল না।
/bin/sh
বাশ থেকে ড্যাশে স্যুইচ করা হ'ল দেবিয়ান সিদ্ধান্ত (উবুন্টু দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত) গতিবেগ দিয়ে মূলত অনুপ্রাণিত হয়েছিল - এটি এমন এক সময়ে এসেছিল যখন তারা বুটের গতি উন্নত করতে বিশাল প্রচেষ্টা চালিয়েছিল, এবং চলমান ধারাবাহিকতায় বুট সিপিইউয়ের একটি বড় অংশ ছিল init স্ক্রিপ্ট।
ব্যাশ ব্যবহারকারীদের জন্য ডিফল্ট ইন্টারেক্টিভ / লগইন শেল হিসাবে ব্যবহার করা অব্যাহত রাখে, তবে ড্যাশ হ'ল এক /bin/sh
এবং এটির জন্য যা স্ক্রিপ্ট যেমন init স্ক্রিপ্টগুলির জন্য কার্যকর হয়।
ড্যাশ খুব দ্রুত, তবে এটি খুব ঘনিষ্ঠভাবে পসিক্স-সামঞ্জস্যপূর্ণ - এমন একটি মান যা বোর্ন শেলের সাথে ঘনিষ্ঠভাবে সংযুক্ত থাকে। সুতরাং একরকমভাবে, বাশ থেকে ড্যাশে স্যুইচ করে আমরা বোর্নের সাথে আরও ঘনিষ্ঠভাবে প্রান্তিকৃত একটি শেলের দিকে ফিরে যাচ্ছি।
ksh
, আমি বলব। পাউনিক প্রসারণ our $ (())) বোর্ন শেলকে আমি মনে করি না, যা পসিএক্স।
^
এটি একটি পাইপ চরিত্র - সুতরাং পসিক্স শি, তবে বোর্নেও echo foo ^ cat
নির্গত হবে ; এই নির্দিষ্ট পরীক্ষাটি কীভাবে অটোকনফ দুজনকে আলাদা করে বলে। foo ^ cat
foo
/bin/sh
লিঙ্ক করা হয়েছে /bin/dash
কি আমি বিশ্বাস করি সামঞ্জস্য কারণে জন্য। অনেক স্ক্রিপ্ট সহজভাবে শুরু হয়
#!/bin/sh
সুতরাং dash
একটি প্রতীকী লিঙ্কে না গিয়ে এবং না তৈরি করে, প্রচুর স্ক্রিপ্টগুলি /bin/sh
উপস্থিত না থাকলে সঠিকভাবে (বা মোটেও ) চালাতে ব্যর্থ হবে।
পরিবর্তন হয়েছিল bash
করার dash
অনুযায়ী কারণ https://wiki.ubuntu.com/DashAsBinSh :
ডিফল্ট শেলটি স্যুইচ করার প্রধান কারণ ছিল দক্ষতা। বাশ ইন্টারেক্টিভ ব্যবহারের জন্য উপযুক্ত একটি দুর্দান্ত পূর্ণ বৈশিষ্ট্যযুক্ত শেল; আসলে এটি এখনও ডিফল্ট লগইন শেল। তবে ড্যাশের সাথে তুলনা করে শুরু করা এবং পরিচালনা করা এটি বরং বড় এবং ধীর। উবুন্টু বুট প্রক্রিয়াটির অংশ হিসাবে প্রচুর শেল দৃষ্টান্ত শুরু করা হয়েছে। / বিন / ড্যাশের অধীনে স্পষ্টভাবে চলার জন্য তাদের প্রত্যেককে পৃথকভাবে পরিবর্তিত করার পরিবর্তে, এমন একটি পরিবর্তন যার জন্য উল্লেখযোগ্য চলমান রক্ষণাবেক্ষণের প্রয়োজন হবে এবং যা ঘনিষ্ঠ মনোযোগ না দিলে পুনরায় চাপাতে দায়বদ্ধ হবে, উবুন্টু মূল বিকাশকারী দল অনুভব করেছে যে এটি কেবল পরিবর্তন করা সবচেয়ে ভাল was ডিফল্ট শেল
sh
লিঙ্কযুক্ত নয় bash
, কারণ
দেবিয়ান নীতি ম্যানুয়ালটি দীর্ঘদিন ধরে নির্দেশ দিয়েছে যে "দোভাষী হিসাবে '/ বিন / শ' উল্লেখ করে এমন শেল স্ক্রিপ্টগুলিতে কেবল পসিক্স বৈশিষ্ট্যই ব্যবহার করা উচিত"
আপনি যদি bash
হিসাবে ব্যবহার করতে চান /bin/sh
:
যদি সমস্যাগুলি আরও বিস্তৃত হয় এবং আপনি ডিফল্ট সিস্টেমের শেলটি আবার পরিবর্তন করতে চান, তবে আপনি প্যাকেজ পরিচালনা সিস্টেমকে / বিন / sh হিসাবে ড্যাশ ইনস্টল করা বন্ধ করতে নির্দেশ দিতে পারেন:
sudo dpkg-reconfigure dash
কিছু বৈশিষ্ট্য রয়েছে যা dash
সরবরাহ করে যে বাশ দেয় না:
এমনকি বাইরের সম্ভাবনা রয়েছে যে কয়েকটি স্ক্রিপ্ট রয়েছে যা এখন ড্যাশের কিছু বৈশিষ্ট্যের উপর নির্ভর করে যা ব্যাশ সরবরাহ করে না!
sh
করার /bin/sh
, would ঐ বুট স্ক্রিপ্ট আপ এই স্ক্রু?
/bin/sh
ডিস্ট্রিবিউশন দ্বারা সরবরাহ করা শেল হিসাবে আপনি তাদের বুট স্ক্রিপ্ট এবং এর মতো লক্ষ্যবস্তু রেখেছিলেন leave তবে আপনি যদি এটি বোর্নের সাথে প্রতিস্থাপন করেন তবে এটি বেশিরভাগ ক্ষেত্রেই উপযুক্ত। কোডটি নিছক পরিমাণে বনাম কেবলমাত্র কয়েক মিনিটের পার্থক্যের কারণে আমি ভাঙ্গতে পারি। অবশ্যই আপনি নিজের স্ক্রিপ্টে যে কোনও শেল কাস্টম হ্যাশবাংয়ের সাথে ব্যবহার করতে পারেন।
/bin/sh
লিঙ্কের সাথে আলাদা সেগুলি থেকে কোনও নির্দিষ্ট ব্যবহারকারী তাদের প্রাথমিক লগইন শেল হিসাবে সেট করেছেন। লক্ষ্য /bin/sh
নির্ভর করে না যার উপর ব্যবহারকারী খুঁজছেন হয়, এবং আপনি কি ব্যবহার করতে প্রয়োজন sudo
রুট ব্যবহারকারী হিসাবে অভিনয় কিছু অন্যান্য উপায়ে --or - এটা পরিবর্তন। এছাড়াও, সাধারণভাবে এবং যে কোনও প্যাকেজের জন্য dpkg-reconfigure
অবশ্যই রুট হিসাবে চালানো উচিত। বিপরীতে, ব্যবহারকারীদের সাধারণত তাদের নিজস্ব প্রাথমিক লগইন শেল পরিবর্তন করার অনুমতি দেওয়া হয় এবং chsh
কমান্ডটি দিয়ে এটি করতে পারে । কারও প্রাথমিক লগইন শেলটির নামটিও প্রবেশ করে $SHELL
এবং কিছু ইন্টারেক্টিভ অ-লগইন শেলগুলির জন্যও ব্যবহৃত হয়।