বাশ ও শ এর মধ্যে পার্থক্য কী?


28

আমি দেখতে পাচ্ছি দুটি ধরণের কোড ব্যবহৃত হচ্ছে:

#!/usr/bin/sh

এবং:

#!/user/bin/bash

আমি এই অনলাইন অনুসন্ধান করেছি এবং মতামত অনেক পৃথক। বেশিরভাগ ওয়েবসাইটে আমি যে ব্যাখ্যাগুলি দেখেছি সেগুলি বলে যে shএটি তার চেয়ে পুরনো bashএবং এর মধ্যে কোনও আসল পার্থক্য নেই।

এগুলির মধ্যে পার্থক্য কি কেউ জানেন? যখন আপনি একে অপরকে ব্যবহার করতে চান তখন আপনি আমাকে ব্যবহারিক উদাহরণ দিতে পারেন?


বিভিন্ন শেল উপর একটি সাধারণ ওভারভিউ জন্য (শুধুমাত্র shএবং bash): http://en.wikipedia.org/wiki/Comparison_of_command_shells
আকিরা

1
এখানে আর একটি দুর্দান্ত ইতিহাস: faqs.org/faqs/unix-faq/ Shell
জন রাইট

উত্তর:


34

bashshঅর্থাত্ একটি সুপারসেট । আপনি যা করতে পারেন তা shকরতে পারেন bash

বাশের আরও বৈশিষ্ট্য রয়েছে (ব্রাঞ্চিং, বিল্টিনস, অ্যারে) স্ক্রিপ্টটি আরও সহজ লেখার জন্য। কিছু পরে * নিক্স'র /bin/shলিঙ্ক হিসাবে রয়েছে/bin/bash

টিউটোরিয়ালটি এখানে কী রয়েছে তার পুরো ব্যাখ্যার জন্য


5
@ সাইফ বেকান: বোর্ন শেল ( sh) কেবল বাড়ানো হয়নি তার একটি কারণ বাশাকে অন্য কেউ লিখেছিলেন। এছাড়াও আমি বাজি ধরলাম লাইসেন্স সংক্রান্ত সমস্যা ছিল। বোর্ন শেল সম্পর্কে নিবন্ধটি পড়ুন en.wikedia.org/wiki/Bourne_shell
ফেলিক্স

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

3
... এবং আরও মজা করার জন্য, উবুন্টু সিমলিংকগুলি / বিন / এস থেকে ড্যাশ। ড্যাশ সম্পূর্ণরূপে sh বা বাশ অনুগত নয়, তবে দ্রুত শুরু হওয়ার কথা। সিস্টেমটি বুট করার সময়, সমস্ত init.d স্ক্রিপ্টগুলি চলতে থাকে এবং আমার মনে হয় সামগ্রিকভাবে সময় সাশ্রয় করা উপযুক্ত it
কেবিয়ার্ড

8
আমি নিশ্চিত যে ড্যাশ সম্পূর্ণরূপে sh অনুগত। সমস্যাটি হ'ল কিছু লোক স্ক্রিপ্টগুলি লিখেন যা / বিন / শ বলে, তবে স্ক্রিপ্টটিতে নিজেই কাজ করতে / বিন / বাশ প্রয়োজন। কেউ সমস্যা মনে করেন না, কারণ বেশিরভাগ সময়, / বিন / এস কেবল / বিন / বাশকে নির্দেশ করে।
davr

8
@ সাইফ: আরও বাড়ানোর কারণ shনা থাকার আরও একটি কারণ রয়েছে : এর উত্স কোডটি খাঁটি নরক। এটা দেখ. এটি সি বলে মনে হচ্ছে ...
মারাত্মক

6

Ditionতিহ্যগতভাবে, / বিন / শ হ'ল আসল বোর্ন শেল, যার কোনও ইতিহাস বা কমান্ড-লাইন সম্পাদনা নেই এবং কোনও কাজের নিয়ন্ত্রণ নেই।

প্রায় ১৫ বছর বা তার বেশি সময় ধরে, বেশিরভাগ ইউনিক্সে পসিক্স শেল ইনস্টল করা রয়েছে, বা কমপক্ষে কেএসএস বা ব্যাশ (যা প্রায় পসিক্স-এর মতো), তবে এখনও / বিন / এস-তে আরও সীমিত শেল রয়েছে have

এর কারণটি হ'ল পুরানো shকমান্ডের প্রত্যাশা করা পুরানো শেল স্ক্রিপ্টগুলি এখনও কাজ করবে।
যেহেতু অক্ষর পছন্দ {, }এবং !ব্যাশ বিশেষ অর্থ আছে, এটা যে একটি পুরোনো শেল ঐ অক্ষর ব্যবহার করে (তাদের পলায়নের ছাড়া) স্ক্রিপ্ট ব্যর্থ হতে পারে সম্ভব।
(বোর্ন শেলটি !!{1,2}আক্ষরিকভাবে গ্রহণ করবে , যেখানে বাশ ব্যাখ্যা করবে যে পূর্ববর্তী কমান্ডের পুনরাবৃত্তি হিসাবে ( !!) একটি বক্ষবন্ধন-প্রসারিত দ্বারা অনুসরণ করা হবে)।

যদিও লিনাক্সে, সমস্ত একই বৈশিষ্ট্য সহ shকমান্ডটি প্রায় সর্বদা কেবল একটি লিঙ্ক থাকে bash


2
/ বিন / এসএস হিসাবে আহ্বান করা হলে বাশ sh- সামঞ্জস্য মোডে আচরণ করার কথা (তবে সর্বদা তা নয়)। উবুন্টু যখন / বিন / বাশকে / বিন / ড্যাশের সাথে সংযুক্ত হতে / বিন / শ পরিবর্তন করে তখন প্রচুর স্টাফ ভেঙে যায়। স্টাফ যা ভাঙা বাশিজমগুলি ভেঙেছিল তারা যখন স্ট্যান্ডার্ড এসএইচ ব্যবহার করা উচিত ছিল।
ব্রোয়াম

4

sh এর অর্থ বোর্ন শেল বা / বিন / শ, যা বেশিরভাগ আধুনিক প্ল্যাটফর্মের কিছু অন্য (পসিএক্স-কনফর্মেন্ট) শেল হতে পারে। "পসিক্স শেল" হ'ল পসিক্স দ্বারা সংজ্ঞায়িত বিমূর্ত শেল , যা পশিক্স মোডে বাশ বা ডিফল্টরূপে ksh বা ড্যাশ দ্বারা প্রয়োগ করা হয়। / বিন / শ কে কখনও কখনও পসিক্স শেলও বলা হয়, কারণ এটি একটি শেল যা বেশিরভাগ প্ল্যাটফর্মের মধ্যে পসিক্সের সাথে সঙ্গতিপূর্ণ হয়। আসল বোর্ন শেলগুলি পসিক্স শেল নয়।

বাশরেফের বাশ এবং বোর্ন শেলগুলির মধ্যে পার্থক্যের একটি তালিকা রয়েছে । পশিক্স মোডে ব্যাশ চালু হওয়ার সময় পরিবর্তনেরman bash একটি তালিকা রয়েছে ।

/ বিন / শ ওএস এক্স-এ কোনও সিমিলিংক বা হার্ড লিঙ্ক নয়, তবে এটি প্রায় / বিন / বাশের মতো আকার:

$ ls -li /bin/{ba,}sh
29631757 -r-xr-xr-x  1 root  wheel  1333920 Jul 26 01:52 /bin/bash
29631758 -r-xr-xr-x  1 root  wheel  1334000 Jul 26 01:52 /bin/sh

ম্যান বাশ :

যদি শ নামের সাথে বাশটি প্রেরণ করা হয় তবে এটি পসিক্স স্ট্যান্ডার্ডের সাথে সামঞ্জস্য রেখে যতটা সম্ভব নিবিড়ভাবে ofতিহাসিক সংস্করণের শুরুর আচরণটি নকল করার চেষ্টা করে।

বোর্ন শেলগুলির নকল করা অন্যথায় বেশ সীমাবদ্ধ। bash +B(বোর্ন) আসলে বন্ধনী সম্প্রসারণের মতো বৈশিষ্ট্যগুলিকে অক্ষম করে।

$ sh
$ echo {a,b}
a b
$ echo $BASH_VERSION
3.2.48(1)-release
$ bash +B
$ echo {a,b}
{a,b}

তবে আপনি পসিএক্স মোড অক্ষম করলেও প্রতিধ্বনি echo -eডিফল্টরূপে আচরণ করে:

$ sh
$ shopt -uo posix
$ echo '1\b2'
2

/ বিন / শ উবুন্টুতে ড্যাশ , তাই কিছু বাশিম ওএস এক্স-তে / বিন / শ দিয়ে কাজ করে তবে উবুন্টু নয়।

আপনি যদি আসল বোর্ন শেলগুলির জন্য (যেমন কিছু) স্ক্রিপ্ট লিখতে চান তবে আপনি #!/usr/bin/env bash +Bপরিবর্তে এটি ব্যবহার করতে পারেন ।

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


2

আসলে, যদিও / বিন / শ / বি / বাশের লিঙ্ক হতে পারে, sh হিসাবে শুরু করা হয় এটি ভিন্নভাবে আচরণ করে। বাশ ম্যানপেজ থেকে:

যদি শ নামের সাথে বাশটি প্রেরণ করা হয় তবে এটি পসিক্স স্ট্যান্ডার্ডের সাথে সামঞ্জস্য রেখে যতটা সম্ভব নিবিড়ভাবে ofতিহাসিক সংস্করণের শুরুর আচরণটি নকল করার চেষ্টা করে।

সুতরাং sh, এটি historicalতিহাসিক sh আচরণ অনুকরণ করার চেষ্টা করে। হিসাবে bash, এটি একটি ইন্টারেক্টিভ লগইন শেল হিসাবে যতটা সম্ভব কার্যকর হওয়ার চেষ্টা করে।


2

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


2
জরুরী ক্ষেত্রেও কার্যকর হতে পারে যদি আপনি কোনও খারাপ কাজ করে থাকেন ldconfigবা /libকোনও কারণে আপনার ডিরেক্টরিটি মুছে ফেলা হয়।
লরেন্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.