/ বিন / বাশের পরিবর্তে শ্বাং / বিন / শের দিকে ইশারা করার কোনও কারণ আছে কি?


53

বেশিরভাগ শেল স্ক্রিপ্টগুলিতে আমি দেখেছি (এগুলি ছাড়াও আমি নিজের লেখা নেই), আমি লক্ষ্য করেছি যে শেবাং সেট করা আছে #!/bin/sh। এটি পুরানো স্ক্রিপ্টগুলিতে আমাকে সত্যিই অবাক করে না, তবে এটি মোটামুটি নতুন স্ক্রিপ্টগুলিতেও রয়েছে।

এক দশক ধরে অনেকগুলি লিনাক্স এবং বিএসডি মেশিনে ফিরে আসার কারণে অনেকটা সর্বব্যাপী এবং প্রায়শই ডিফল্ট হওয়ার কারণে ওভারকে /bin/shপ্রাধান্য দেওয়ার কোনও কারণ আছে কি ?/bin/bashbash


23
/bin/shআপনি নির্দিষ্ট bashফাংশন ব্যবহার না করলে এটি ব্যবহার করা ভাল পার্টিস । একদিন আপনাকে এমন কোনও সিস্টেমে আপনার স্ক্রিপ্ট ব্যবহার করতে হবে যা এটি ইনস্টল করা নেই (রিমোট সার্ভার, এমবেডেড কম্পিউটার ...)
ম্যাথিউ

1
সাধারণভাবে আপনার এমন মতামত জিজ্ঞাসা করা উচিত যা মতের ভিত্তিতে নিজেরাই উত্তর দেয় (যা আমি বিশ্বাস করি যে এই প্রশ্নের উত্তর দেওয়া যেতে পারে এমন একমাত্র সম্ভাব্য উপায় - তবে এটি কেবল আমার মতামত )
মাইকজার্ভ

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

3
@ জুলসমাজুর ...the answers so far are fairly subjective...এ "সাবজেক্টিভ" বিবৃতিটি মূলত সংজ্ঞা অনুসারে মতামত ভিত্তিক। /bin/bashকেবলমাত্র ব্যাশ যখন স্পষ্টভাবে প্রয়োজন হয় তখন ব্যবহার করা উচিত। 40+ বছর বিকাশকারী হিসাবে, বহু আগে bash, পরীক্ষার সময় ছাড়া আমার প্রায় পরিষ্কারভাবে কখনও এর প্রয়োজন হয় না। (আমি শেল এক্সটেনশনগুলি এড়াতেও সচেষ্ট হই, তবে আমার বেশিরভাগ স্ক্রিপ্টগুলি বিতরণের উদ্দেশ্যে)) নেটটিতে অনেকগুলি স্ক্রিপ্টও বিস্তৃত ব্যবহারের জন্য হওয়া উচিত।
ব্যবহারকারী 2338816

2
@ ইউজার 2338816 আমার খারাপ, আমি উদ্দেশ্য বলতে চাইছি । আপনার পয়েন্ট জন্য ধন্যবাদ!
জুলাই

উত্তর:


83
  1. ডিফল্টরূপে শিপিং ব্যাশ নেই এমন সিস্টেম রয়েছে (যেমন ফ্রিবিএসডি)।
  2. এমনকি যদি ব্যাশ ইনস্টল করা থাকে তবে এটি সম্ভবত অবস্থিত নাও হতে পারে /bin
  3. সর্বাধিক সাধারণ স্ক্রিপ্টগুলির জন্য ব্যাশের প্রয়োজন হয় না।
  4. পসিক্স শেল ব্যবহার করা আরও পোর্টেবল এবং স্ক্রিপ্টগুলি বিভিন্ন ধরণের সিস্টেমে চালিত হবে।

17
আরেকটি কারণ: প্রায়শই / বিন / শ ব্যাশের চেয়ে দ্রুত হয় বা কমপক্ষে লোড দ্রুত হয় (ছোট হওয়ার কারণে)।
ডারোবার্ট

5
@derobert, /bin/shদ্রুত যদি না হয় bash, এখনও ওএস / X অথবা RHEL যেখানে মত কয়েক সিস্টেম আছে /bin/shহয় bash
স্টাফেন চেজেলাস

1
না। কিছু ওএস এটি লিঙ্ক করে, কারণ ব্যাশ পিছনের দিকে সামঞ্জস্যপূর্ণ।
সোব্রিক

7
বেশ কয়েক স্ক্রিপ্ট অনুমান /bin/shহয় /bin/bash। উশুন্টু বাশ থেকে ড্যাশের দিকে স্যুইচ করে সেগুলি ভেঙে ফেলেছে
atamanroman

19
@ অ্যাটম্যানোম্যান: স্ক্রিপ্টগুলি প্রথমে ভুল ছিল, #!/bin/bashবাশ চাইলে তাদের ব্যবহার করা উচিত ছিল (এতে কোনও ভুল নেই!)। পরিবর্তনটি বেশিরভাগই ডিবিয়ান নদীর উজানে হয়েছিল। এটি ব্যবহারকারীর অভিজ্ঞতা উন্নত করেছে, এটি সিস্টেম শুরুর সময় একটি পরিমাপযোগ্য প্রভাব ফেলেছিল। এটি সুরক্ষাকেও ইতিবাচকভাবে প্রভাবিত করেছিল, "শেলশক" দেখুন।
ডায়েটারিচ এপ্প

28

(দেবিয়ান সম্পর্কিত: উবুন্টু, পুদিনা, ইত্যাদি) এর বেশিরভাগ সিস্টেমে স্ক্রিপ্টগুলি দ্রুত ড্যাশ চালানোর জন্য লেখা হয়, যা সেই সিস্টেমে ডিফল্ট / বিন / শ is কারণ দ্বিগুণ:

  • সিস্টেমের গতি। একটি ছোট কোড ড্যাশ দ্রুত লোড করে এবং দ্রুত চালায়। শেল স্ক্রিপ্টগুলির প্রোগ্রামারদের কিছু (ছোট?) অতিরিক্ত প্রচেষ্টা (ব্যয়) সহ।

  • নিরাপত্তা। শাঁসের বৈচিত্র্যগুলি বাগের স্থিতিস্থাপকতায় সহায়তা করে। ডিবিয়ান সিস্টেমগুলি বেশিরভাগ শেলশকের ঝুঁকিপূর্ণ ছিল না কারণ ডিফল্ট শেলটিতে এই ধরনের দুর্বলতা ছিল না।

ব্যাশ প্রকৃতপক্ষে ব্যবহারকারীদের জন্য ডিফল্ট শেল , যেমনটি আরও শক্তিশালী এবং কোডিং সহজ করার জন্য আরও অনেক উপাদান রয়েছে। এটি shম্যাক ওএসে ( ডিফল্ট / / বিএন / সংযুক্ত) is তবে bashএর লিঙ্ক নামের সাথে কল করা shএটি একটি পিক্সিক্স কমপ্লায়েন্ট শেল হিসাবে শুরু করে।


2
একটি সহজ শেল উপলভ্য সরঞ্জামগুলির একটি আরও সীমিত সেট এর জন্য লিখিত কোডকে আরও কঠিন করে তোলে (দয়া করে এ সম্পর্কে কোনও ধর্মান্ধতা যুদ্ধ এড়ান)। এজন্য কিছু ব্যবহারকারী zsh পছন্দ করেন, যার কাছে বাশের চেয়েও বেশি সরঞ্জাম উপলব্ধ। উভয়ের চূড়ান্ততার মধ্যে ভারসাম্য বশকে আমি বেশি পছন্দ করি।

4
@ রবার্টএল, কেএসএসে যুক্ত এবং ব্যাশের দ্বারা গৃহীত অনেকগুলি সুবিধা বিদ্যমান কারণ তারা শক্তিশালী এবং সঠিক স্ক্রিপ্টগুলি লেখার প্রক্রিয়াটিকে যথেষ্ট পরিমাণে সহজ করে দেয়। অপ্রত্যক্ষ দায়িত্ব ও মূল্যায়ন নিরাপদে সম্পাদনের অনুমতি দেয় এমন বিভিন্ন সংযোজন ছাড়াই উদাহরণস্বরূপ, একজন evalপরিচারক সুরক্ষা এক্সপোজার সহ নিজেকে ব্যবহার করে খুঁজে পেতে পারেন ; একইভাবে, বিল্ট-ইন রেজেক্স সমর্থন ব্যতীত, একক লাইনের মধ্যে মিলে যাওয়ার জন্য একজনকে বহিরাগত কমান্ডগুলি (ভারী পারফরম্যান্সের জরিমানার সময়) ব্যবহার করতে হবে
চার্লস ডাফি

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

21

অন্যরা উল্লেখ করেছেন যে প্রশ্নটির জায়গাটি, যে বোর্ন অ্যাগেইন শেলটি ডিফল্ট এবং সর্বব্যাপী, সম্পূর্ণ ভুল।

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

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

এগুলির ফলাফল বুটস্ট্র্যাপের পারফরম্যান্সে একটি বড় লাভ।

সুতরাং এখানে শেল দুটি পৃথক শ্রেণীর বিবেচনা করা হয়:

  • সমস্ত ঝলমলে ইন্টারেক্টিভ বৈশিষ্ট্যগুলির শেলগুলি, যা অ্যাকাউন্ট ডেটাবেজে ব্যবহারকারীদের জন্য ইন্টারেক্টিভ লগইন শেল হিসাবে কনফিগার করা আছে ।
  • শেলগুলি যেগুলি প্রচুর স্ক্রিপ্টগুলি দ্রুত ব্যাখ্যা করে, যা শেল স্ক্রিপ্ট প্রোগ্রামগুলির দ্বারা স্ক্রিপ্ট দোভাষী হিসাবে ব্যবহৃত হয় ।

নোট করুন যে "পছন্দসই /bin/sh" হিসাবে এ সম্পর্কে কথা বলার বিষয়টি অত্যধিক প্রশংসনীয়। দেবিয়ানের কমপক্ষে দুটি লক্ষ্য ছিল:

  1. দেবিয়ান অ্যালকুইস্ট শেল, জেড শেল (পসিএক্স মোডে), বোর্ন অ্যাগেইন শেল (পসিএক্স মোডে), মিরবিএসডি কর্ন শেল এবং অন্যদের হিসাবে প্রশাসকগণের মুখে যেমন /bin/shছিল ...

    1. … স্ক্রিপ্টগুলি যথাসম্ভব পোর্টেবল তৈরি করা, যাতে /bin/shকোনও জিনিসকে ভাঙ্গতে না ম্যাপ করে তা স্যুইচ করা; অথবা

    2. … অ-বহনযোগ্য স্ক্রিপ্টগুলি কেবল সেই মানচিত্রটিকে প্রত্যাশা না করে স্পষ্টরূপে সঠিক দোভাষী প্রোগ্রামকে টার্গেট করে/bin/sh

  2. সেখানে ডেবিয়ান Almquist জন্য ডিফল্ট ম্যাপিং শেল উপার্জন ছিল /bin/shপরিবর্তে বোর্ন শেল, তাই সেই স্ক্রিপ্ট ছিল POSIX-conformant (অথবা, আরো সঠিকভাবে, ডেবিয়ান নীতি ম্যানুয়াল conformant) আরও দ্রুত দৌড়ে।

এবং অবশ্যই একবার এর মধ্যে ;ুকলে, কেউ এটিকে আরও অনেক বেশি এগিয়ে নিতে পারে; যেমন পছন্দগুলির দক্ষতা ট্রেড অফগুলি বিবেচনা করা /bin/trueএবং /usr/bin/clearশেল স্ক্রিপ্ট বা সংকলিত প্রোগ্রামগুলি হওয়া। তবে এটি এই উত্তরের সুযোগের বাইরে, ভাগ্যক্রমে। ☺

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

আরও পড়া


2
"শেষ পর্যন্ত, দেবিয়ানকে অ্যালকোভিস্ট শেলের সাথে সামান্য সামঞ্জস্য করতে হয়েছিল, পজিক্স শেল নির্মাণের বেশ কয়েকটি কাঠামোগুলির জন্য সমর্থন যোগ করতে হয়েছিল যা কেবল খুব গভীর এবং ব্যাপকভাবে এম্বেড করা ছিল এবং এ থেকে মুক্তি পেতে খুব কার্যকর ছিল।" - আপনার লিঙ্কগুলির মধ্যে কোনটির কাছে এ সম্পর্কিত তথ্য রয়েছে? এটা খুব আকর্ষণীয় মনে হচ্ছে। :)
ওয়াইল্ডকার্ড

3
আইএমএইচও, পারফরম্যান্সটি শুধুমাত্র পরিবর্তনের সাথে একমত হওয়ার জন্য প্রেরণা। পরিবর্তনের প্রাথমিক কারণ হ'ল বাশ পিছনের দিকে সামঞ্জস্যতা ভঙ্গ করে। আমার ব্যক্তিগত জীবনে কমপক্ষে 3 বার ব্যাশ সমস্যাগুলি সমাধান করতে হয়েছিল কারণ স্ক্রিপ্টটি ব্যাশের একটি সংস্করণে কাজ করবে তবে অন্যটিতে ব্যর্থ হয়েছিল (সাধারণত ওএস আপগ্রেড হওয়ার পরে ঘটে)। ড্যাশ কেবল কিছুটা দ্রুত দোভাষী হয় না। এটি আচরণের ক্ষেত্রেও অনেক বেশি স্থিতিশীল।
slebetman

Schily Bourne Shellম্যান পৃষ্ঠায় মন্তব্যগুলি কিনা তা আমি আগ্রহী হব , দেখুন schilytools.sourceforge.net/bosh.html লোকেরা কীভাবে একটি পোর্টেবল স্ক্রিপ্ট লিখতে হয় তা বুঝতে অনুমতি দেওয়ার জন্য উপযুক্ত (এটি কেবল Bourne Shell features1989 এর উপর নির্ভর করে )। আমি যা করেছি তা প্রতিটি বর্ধনের উল্লেখ ছিল যা পুরানো বোর্ন শেলসে ছিল না। বিটিডাব্লু: ড্যাশগুলিতে বাশিজমের একটি তালিকা জানতে আগ্রহী।
ধীরে ধীরে

8

/ বিন / বাশের পরিবর্তে শ্বাং / বিন / শের দিকে ইশারা করার কোনও কারণ আছে কি?

হ্যাঁ. @ মার্কোর চমৎকার উত্তর এটির ভালরেখা দেয়।

আমার শেবাংয়ে আমার কী ব্যবহার করা উচিত?

আপনার নিজের স্ক্রিপ্টগুলি লেখার সময়, আপনি শেবাংকে সর্বাধিক সাধারণ জিনিসটির দিকে নির্দেশ করা উচিত যা আপনি পরীক্ষা করেছেন।

আমার সিস্টেমে (সেন্টোস 6.6) shএ সিমলিংকযুক্ত bash:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Dec  2  2014 /bin/sh -> bash

এর অর্থ হল যে আমি #!/bin/bashআমার স্ক্রিপ্টে বাশিম নেই তা যাচাই না করে আমি সর্বদা আমার শেবাংয়ে ব্যবহার করি।

আপনার কাছে শেবাং সেট করে #!/bin/shআপনি প্রতিশ্রুতি দিচ্ছেন যে স্ক্রিপ্টটি সমস্ত বাস্তবায়নের সাথে কাজ করবে sh

স্ক্রিপ্টটি ব্যাশ দিয়ে কাজ করবে বলার চেয়ে এটি অনেক বড় প্রতিশ্রুতি।

এখানে কোনও স্ক্রিপ্টের উদাহরণ রয়েছে shযা সিস্টেমটি প্রয়োগ করছে কি প্রয়োগের উপর নির্ভর করে ভুল আচরণ করবে :

#!/bin/sh
n=1
a=$((++n))
echo $n

bashস্ক্রিপ্ট ব্যবহার করার সময় মুদ্রণ করা হবে:

2

dashস্ক্রিপ্ট ব্যবহার করার সময় মুদ্রণ করা হবে:

1

আমি যদি ব্যবহার করতে চাই তবে আমার #!/bin/shকী করা দরকার?

  • স্ক্রিপ্টটি এতে পরীক্ষা করুন checkbashisms- নোট করুন যে এটি সমস্ত বাশিমকে খুঁজে পাবে না। এটি আমার স্ক্রিপ্টে উপরের বাশিজমটি খুঁজে পেল না
  • অন্য shবাস্তবায়ন ব্যবহার করে স্ক্রিপ্টটি পরীক্ষা করুন । আমি সাধারণত এটি দিয়ে পরীক্ষা করি dash, তবে আমি আশা করি যে কিছু বাশিজম বা ড্যাশিম এখনও পড়ে যেতে পারে।

DashAsBinSh পৃষ্ঠা উবুন্টু উইকি আকর্ষণীয় তথ্য প্রচুর হয়েছে।


6
"আপনার নিজের স্ক্রিপ্টগুলি লেখার সময়, আপনি শবেংটি সর্বাধিক সাধারণ বিষয়টির দিকে নির্দেশ করা উচিত যার বিরুদ্ধে আপনি পরীক্ষা করেছেন .... শ্যাবাংকে # তে সেট করে! / বিন / এস আপনি প্রতিশ্রুতি দিচ্ছেন যে স্ক্রিপ্টটি sh এর সমস্ত বাস্তবায়ন নিয়ে কাজ করবে । " দুর্দান্ত পয়েন্ট। +1, এবং আপনি কীভাবে ভবিষ্যতের জন্য আমার শেবাংগুলি লিখব তা আপনি আমাকে পুনর্বিবেচনা করেছেন। ধন্যবাদ! :)
ওয়াইল্ডকার্ড

2
ঠিক আছে, সমস্ত বাস্তবায়ন নয় /bin/sh; কেবল পসিক্স-কমপ্লায়েন্টগুলি।
ব্ল্যাকলাইট জ্বলছে

4

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

/bin/shনিজেকে এমন এক এবং একমাত্র স্ক্রিপ্ট ইন্টারপ্রেটার যা নিজেই ইউনিক্স বলে everything তবে প্রচুর উত্তেজনাপূর্ণ সিস্টেমগুলির সাথে, /bin/shএবং সম্পর্কিত ইউটিলিটিগুলি পসআইএক্স ১.১-১৯ "6 "শেল এবং ইউটিলিটিস" স্পেসের সাথেও সামঞ্জস্যপূর্ণ নয়, আরও আধুনিক যেকোন কিছু ছেড়ে যাক। স্ট্যান্ডার্ড-কমপ্লায়েন্ট সরঞ্জামগুলি হ'ল একটি alচ্ছিক অ্যাড-অন, ইনস্টল করা আছে /usr/xpg4বা এই জাতীয় কিছু non 1 পোর্টেবল-সাবসেট শেল ভাষার স্ক্রিপ্টিং পসিক্স শেল ভাষাতে স্ক্রিপ্ট করার চেয়ে আরও ক্লান্তিকর এবং ত্রুটি-প্রবণ। ( configureআপনি যদি আমাকে বিশ্বাস না করেন তবে কোনও সময় অটোকনফ-উত্পাদিত স্ক্রিপ্টের মাধ্যমে পড়ুন Just সেটআপ আপনাকে বোঝানোর জন্য পর্যাপ্ত পরিমাণে হওয়া উচিত))

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

অতএব, আপনার কোনও স্ক্রিপ্ট কখনও লেখা উচিত নয়#! /bin/bash , কারণ এটি যদি বিকল্প হয় তবে আরও ভাল ভাষাও একটি বিকল্প is

1 উদাহরণস্বরূপ, সোলারিস 10 এবং বয়স্ক জাহাজে মূল বোর্ন শেল হিসাবে /bin/sh। আমাকে জানানো হয়েছে যে সোলারিস 11 এটিকে ksh93 এ আপডেট করেছে।


3
আপনি কোন ভাষায় কোনও সিস্টেম বুট করার জন্য একটি স্ক্রিপ্ট লিখবেন? অথবা কোনও সোহো রাউটারের ভিতরে (সীমিত এম্বেড সিস্টেমগুলি)? নাকি অ্যান্ড্রয়েডে? এই সমস্ত ক্ষেত্রে একটি শেল পাওয়া যাবে। পার্ল না।

1
আপনার উত্তরের সোলারিস সম্পর্কিত অংশগুলি সম্পর্কে কিছু ভুল আছে। সোলারিস 10 এবং বয়স্ক তারিখে /bin/shহয় না POSIX.1-1996 কিন্তু আসলে একটি প্রি-POSIX সিনট্যাক্স মূল বোর্ন শেল। করে নির্মিত হয় #!/bin/shস্ক্রিপ্ট এই রিলিজ সঙ্গে চালানোর জন্য খুবই গরিব কুঁড়েঘর। সোলারিসের পোর্টেবল স্ক্রিপ্টগুলি ব্যবহার #!/usr/xpg4/bin/shকরবে যা অন্যান্য ওএসে খুব পোর্টেবল হবে না। সর্বশেষতম সোলারিসের উপর, ওরাকল সোলারিস 11 প্রথম প্রকাশিত ২০১১, /bin/shএমন এক আধুনিক ksh93যা সাম্প্রতিক পসিক্স স্পেকস মেনে চলে এবং এতে অনেকগুলি আধুনিক এক্সটেনশন রয়েছে।
jlliagre

1
@ বাইনারিজেব্রা: "একটি শেল" পাওয়া যাবে, হ্যাঁ। তবে ব্যাশ অগত্যা শেল নয় (বিশেষত বেশিরভাগ সোহো রাউটারগুলি ব্যবহার করে ashযা ব্যস্তবক্সে সরবরাহ করা হয়), এবং আমার মনে হয় zwol ঠিক আছে যে ব্যাশের চেয়ে পার্ল বেশি পাওয়া যায়।
বেন ভয়েগ্ট

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

2
আপনার অত্যন্ত মতামতযুক্ত এবং অ-বাস্তব দাবির সাথে পুরোপুরি দ্বিমত পোষণ করুন যে "যদি bashউপলভ্য থাকে তবে এটি আরও ভাল ভাষা তাই আপনার কোনও bashকোড লিখতে হবে না " " এছাড়াও, @sixtyfootersdude হিসাবে উল্লেখ করা হয়েছে, আপনার স্ক্রিপ্টটি কোনও পসিক্স শেলটির সাথে কাজ করে না তা পরীক্ষা না করে আপনি সর্বদা ব্যবহার করা উচিত । #!/bin/bash
ওয়াইল্ডকার্ড

0

আপনার আসলে ব্যবহার করা উচিত

#! /bin/env sh

অথবা

#! /bin/env bash

এই পদ্ধতিতে আপনি যেভাবে শেলটি চালু করবেন সেভাবে তারা সেই সিস্টেমে ইনস্টল করছেন।

সুপার নিরাপদ থাকতে ( যেমন একক ব্যবহারকারী পুনরায় বুট করার ক্ষেত্রে) shঅন্যথায় ব্যবহার করুন bash


6
থেকে এই উত্তর : the advantage of #!/usr/bin/env python is that it will use whatever python executable appears first in the user's $PATH. The disadvantage of #!/usr/bin/env python is that it will use whatever python executable appears first in the user's $PATH.এটি সম্ভবত আরো ক্ষেত্রে প্রযোজ্য shএবং bash
জুলাই

12
না, আপনার কোনও #!/bin/envপোর্টেবল স্ক্রিপ্টে কিছু ব্যবহার করা উচিত নয় । এটি অনুমান করা পুরোপুরি যুক্তিযুক্ত যে এটি /bin/shবিদ্যমান এবং এটি একটি কার্যনির্বাহী, পসিক্স-কমপ্লায়েন্ট শেল। অন্যদিকে, আমার সিস্টেমে একটিও নেই /bin/env
ব্ল্যাকলাইট জ্বলজ্বলে

এছাড়াও একটি ভাল পয়েন্ট।
জুলাই

1
@Blacklight Shining এটা স্পষ্টভাবে একটি POSIX অনুবর্তী শেল অনুমান করা ভুল /bin/sh। পসিক্স এর প্রয়োজন হয় না এবং পসিক্স শংসাপত্রপ্রাপ্ত প্ল্যাটফর্মে একটি পসিক্স অনুগত পরিবেশ পেতে অন্যান্য নিয়মগুলি সংজ্ঞায়িত করে।
স্কিচলি

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