পছন্দের বাশ শেবাং কী?


1127

Bashবেশিরভাগ ব্যবহারের জন্য অন্যের চেয়ে অবাস্তিকভাবে ভাল কোনও শেবাং আছে ?

  • #!/usr/bin/env bash
  • #!/bin/bash
  • #!/bin/sh
  • #!/bin/sh -
  • ইত্যাদি

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


4
এবং /usr/local/bin/bashএটি ওপেনবিএসডি-তে রয়েছে।
jww

উত্তর:


1531

আপনি ব্যবহার করা উচিত #!/usr/bin/env bashজন্য বহনযোগ্যতা : বিভিন্ন * nixes করা bashবিভিন্ন জায়গায়, এবং ব্যবহার /usr/bin/envপ্রথম চালানোর জন্য একটি কার্যসংক্রান্ত নেই bashপাওয়া PATH। এবং shহয় নাbash


9
ধন্যবাদ। যোগ করার মতো দেখায় - $! / Usr / bin / env বাশ এর শেষে - কিছুই করবে না যেহেতু কেবলমাত্র একটি যুক্তি শেবাঙে * নিক্স দ্বারা অনুমোদিত এবং এটি 'বাশ' দ্বারা ব্যবহৃত হয়। স্পষ্টতই কেবল কমান্ডলাইনে স্ক্রিপ্টে দূষিত যুক্তিগুলি রোধ করার জন্য কার্যকর যদি স্ক্রিপ্টের শেবাং অন্য কোনও যুক্তি ( /bin/shইত্যাদি) না করে থাকে with
কুরটোসিস

13
@ রে সমস্ত সিস্টেমে bashবাস করে না /bin
ptierno

12
আমার জন্য একই, আমি এটি কেবলমাত্র একটি নামটিতে যুক্ত করেছি:, alias shebang='echo "#!/usr/bin/env bash"'এখন আমাকে এখানে যাওয়ার পরিবর্তে টার্মিনালটি খুলতে হবে এবং শেবাং টাইপ করতে হবে।
ওয়েলেক্স 16'84

19
এই উত্তরটি প্রতারণামূলক। POSIX বলে না যে env/usr/bin/env। এটি /bin/envবাস্তবে বা যে কোনও জায়গায় হতে পারে , যতক্ষণ এটি পথে রয়েছে। এটা হতে পারে /dummy/envযদি /dummyহয় PATH। শেবাং নিজেই পসিক্সের অধীনে সংজ্ঞায়িত, তাই আমি #!stop toasterইউএসবি কফি মেশিনটি শুরু করতে এবং পসিএক্স অনুগত হতে পারি । তাই এর #!/usr/bin/env bashচেয়ে বিশেষ ভাল নয় #!/bin/bash, নির্ভর করে এটি কম পোর্টেবল হতে পারে।
ডার্কলাইন

19
@ ডার্কফ্লিন বহনযোগ্যতা নিখুঁত নয় - এমন কোনও স্ক্রিপ্ট তৈরি করা গাণিতিকভাবে অসম্ভব যা প্রতিটি প্ল্যাটফর্মে একই কাজ করে। ২০১২ সাল থেকে ২০১৩ সাল অবধি যেকোরের /usr/bin/envচেয়ে বেশি মেশিনে উপস্থিত রয়েছে , সুতরাং এই লাইন দিয়ে শুরু হওয়া একটি স্ক্রিপ্ট যতটা সম্ভব মেশিনে প্রত্যাশিত কাজটি করবে /bin/bash/usr/bin/bash
l0b0

80

/bin/shসাধারণত সিস্টেমের ডিফল্ট শেলের একটি লিঙ্ক, যা প্রায়শই bashকিন্তু চালু থাকে, উদাহরণস্বরূপ, ডিবিয়ান সিস্টেমগুলি হালকা ওজন dash। যে কোনও উপায়ে, আসল বোর্ন শেল sh, সুতরাং যদি আপনার স্ক্রিপ্টটি কিছু bash(২ য় প্রজন্ম, "বোর্ন অ্যাগেন শ") নির্দিষ্ট বৈশিষ্ট্য ( [[ ]]পরীক্ষা, অ্যারে, বিভিন্ন মিষ্টিজাতীয় জিনিস ইত্যাদি) ব্যবহার করে তবে আপনার আরও নির্দিষ্ট হওয়া উচিত এবং পরে ব্যবহার করা উচিত । এই পদ্ধতিতে, ব্যাশ ইনস্টল করা হয়নি এমন সিস্টেমে আপনার স্ক্রিপ্ট চলবে না। আমি বুঝতে পারি এই বিবর্তন নিয়ে চলচ্চিত্রের একটি উত্তেজনাপূর্ণ ট্রিলজি থাকতে পারে ... তবে এটি শ্রবণশক্তি হতে পারে।

এছাড়াও মনে রাখবেন যে, যখন যেমন evoked sh, bashকিছুটা হলেও POSIX মান হিসেবে আচরণ করবে sh (এছাড়াও দেখুন গনুহ ডক্স এ ব্যাপারে)।


2
পাবলিক ডোমেন কর্ন শেল (পিডিএসএক্স) ওপেনবিএসডি-তে ডিফল্ট।
jww 5'16

বেশিরভাগ সিস্টেমে কোথাও লিঙ্ক করা হবে না কারণ এটির ফলে স্ক্রিপ্টগুলি মাউন্ট হওয়ার আগে চালানো বরং আরও শক্ত হয়ে উঠবে । /bin/sh/usr/usr
এআইজি

@aij আমি জানি না কেন আমি করা "বহু অথবা সবচেয়ে" সেখানে - আমি একটি ফেডোরা ব্যবহারকারী, যেখানে আছি /binএবং /sbinবছরের পর বছর ধরে শুধু ডিফল্টরূপে symlinks হয়েছে, এর /usr/binএবং /usr/sbinযাতে প্রেক্ষাপটে /bin/shএকটি লিঙ্ক bashএবং প্রকৃত ডিরেক্টরি হয় /usr/bin। তবে আমি উপরেরটি সংশোধন করব।
সুস্বাদু

43

আমি ব্যবহার করার পরামর্শ দিচ্ছি:

#!/bin/bash

এটি ১০০% বহনযোগ্য নয় (কিছু সিস্টেম bashঅন্য কোনও স্থানে রাখে /bin) তবে প্রচুর বিদ্যমান স্ক্রিপ্টগুলি #!/bin/bashবিভিন্ন অপারেটিং সিস্টেমগুলিকে চাপ দেয় যাতে /bin/bashকমপক্ষে মূল অবস্থানে একটি সিমলিংক তৈরি হয়।

এর বিকল্প:

#!/usr/bin/env bash

পরামর্শ দেওয়া হয়েছে - তবে envকমান্ডটি থাকার কোনও গ্যারান্টি নেই /usr/bin(এবং আমি সিস্টেমগুলি ব্যবহার করেছি যেখানে এটি নেই)। তদতিরিক্ত, এই ফর্মটি bashবর্তমান ব্যবহারকারীদের মধ্যে প্রথম উদাহরণটি ব্যবহার করবে $PATH, যা ব্যাশ শেলের উপযুক্ত সংস্করণ নাও হতে পারে।

(তবে যে /usr/bin/envকোনও যুক্তিসঙ্গত আধুনিক সিস্টেমে কাজ করা উচিত, হয় কারণ envএটি রয়েছে /usr/binবা কারণ সিস্টেম এটিকে কাজ করার জন্য কিছু করে।

আপনার যদি নেই এমন সিস্টেমে চালনার জন্য কোনও স্ক্রিপ্টের প্রয়োজন হয় তবে আপনি /bin/bashসঠিক অবস্থানটি চিহ্নিত করতে স্ক্রিপ্টটি সংশোধন করতে পারেন (এটি স্বীকার করা অসুবিধাজনক)।

আমি বৃহত্তর গভীরতা tradeoffs আলোচনা করেছি আমার উত্তর থেকে এই প্রশ্নের

কিছুটা অস্পষ্ট আপডেট: একটি সিস্টেম আমি ব্যবহার করি, টার্মাক্স , একটি ডেস্কটপ-লিনাক্স-এর মতো স্তর যা অ্যান্ড্রয়েডের অধীনে চলে, এর /bin/bash( bashনেই /data/data/com.termux/files/usr/bin/bash) - তবে সমর্থন করার জন্য এটির বিশেষ পরিচালনা রয়েছে #!/bin/bash


3
2-বছর পরে এবং এটি এখনও এখানে সেরা পরামর্শ। যদি সহজ সমাধান কাজ না করে তবে আপনার নিজের পূর্ববর্তী সিদ্ধান্তগুলি নিয়ে প্রশ্ন করা উচিত। গৃহীত এবং সর্বাধিক উত্সাহিত উত্তরটি ভুল নয়, এটি ঠিক ঠিক নয় :)
সফটওয়্যার ইঞ্জিনিয়ার

26

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

#!/bin/sh -

(এটি দুটি ড্যাশও হতে পারে, অর্থাত্ --) শেষ হওয়া বাশ বিকল্পগুলি ফাইল-নেম এবং আর্গুমেন্ট হিসাবে বিবেচিত হবে।

envকমান্ডটি ব্যবহার করা আপনার স্ক্রিপ্টকে বহনযোগ্য করে তোলে এবং আপনার স্ক্রিপ্টের জন্য কাস্টম এনভায়রনমেন্ট সেটআপ করতে দেয় তাই পোর্টেবল স্ক্রিপ্টগুলি ব্যবহার করা উচিত

#!/usr/bin/env bash

বা ভাষা যেমন পার্লের জন্য যাই হোক না কেন

#!/usr/bin/env perl

manজন্য পৃষ্ঠাগুলি সন্ধান নিশ্চিত করুন bash:

man bash

এবং env:

man env

নোট: উপর ডেবিয়ান এবং ডেবিয়ান ভিত্তিক সিস্টেম, উবুন্টু মত, shলিঙ্ক করা dashনা bash। সমস্ত সিস্টেম স্ক্রিপ্ট ব্যবহার হিসাবে sh। ডেবিয়ানের মতে এটি ব্যাশ বাড়তে এবং সিস্টেমকে স্থিতিশীল রাখতে দেয়।

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


4

এটি কীভাবে আপনি আপনার ব্যাশ স্ক্রিপ্টগুলি লেখেন তার উপর এটি নির্ভর করে। আপনার /bin/shযদি বাশের সাথে অনুরূপ থাকে, যখন ব্যাশকে হিসাবে ডাকা হয় sh, কিছু বৈশিষ্ট্য অনুপলব্ধ থাকে

আপনি যদি ব্যাশ-নির্দিষ্ট, নন-পসিক্স বৈশিষ্ট্যগুলি চান তবে ব্যবহার করুন #!/bin/bash


3
ওপেনবিএসডি-তে বস ইনস্টল করা নেই। আপনি যদি এটির মাধ্যমে ইনস্টল করেন তবে এটি pkg_addএর মধ্যে অবস্থিত /usr/local/bin, যা পথে নাও যেতে পারে।
jww

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