স্ক্রিপ্টগুলিতে, প্রথম লাইনে দোভাষীর পথ নির্দিষ্ট করা উচিত।
তবে বিভিন্ন সার্ভারে লিনাক্স, ইউনিক্স বা বিএসডি-তে এই পথটি আলাদা হতে পারে।
এর চেয়ে ভাল আর কী?
#!/usr/bin/env bash
অথবা
#!/bin/bash
স্ক্রিপ্টগুলিতে, প্রথম লাইনে দোভাষীর পথ নির্দিষ্ট করা উচিত।
তবে বিভিন্ন সার্ভারে লিনাক্স, ইউনিক্স বা বিএসডি-তে এই পথটি আলাদা হতে পারে।
এর চেয়ে ভাল আর কী?
#!/usr/bin/env bash
অথবা
#!/bin/bash
উত্তর:
আপনি যদি কোনও নির্দিষ্ট স্থানে ইনস্টলৃত কোনও দোভাষী দের সিস্টেম ইনস্টলড সংস্করণটি ব্যবহার করতে চান তবে সরাসরি পথটি ব্যবহার করুন। আপনি যদি দোভাষীর যে কোনও সংস্করণ ব্যবহারকারীর প্রথমে প্রদর্শিত হয় তবে $PATH
ব্যবহার করুন #!/usr/bin/env ...
।
env
কমান্ড একটি নির্দিষ্ট কমান্ড আবাহন করে, আপনাকে কোনো সেট থাকে বা সেট এনভায়রনমেন্ট ভেরিয়েবল:
env FOO=BAR do-something
env DISPLAY=:0.0 xterm -ls &
যদি আপনি কোনও পরিবেশের ভেরিয়েবল বা অন্যান্য বিকল্প নির্দিষ্ট না করেন তবে এটি কেবল নামক কমান্ডটি চাওয়া হবে। (এটি এভাবে ব্যবহার করা যুক্তিযুক্তভাবে কিছুটা হ্যাক)
শেবাং লেখার উদ্দেশ্য হিসাবে
#!/usr/bin/env interp
যেটি interp
প্রথমে উপস্থিত হয় সেটাই ডাকে $PATH
।
এর অর্থ হল আপনি জানেন যে, যখন স্ক্রিপ্ট লেখার থাকে না, ঠিক কোথায় interp
হয় (বলুন, যদি এটা হয় হতে পারে /bin
, /usr/bin
অথবা /usr/local/bin
)। অবশ্যই আপনাকে জানাতে চাই যে আছে env
হয় /usr/bin/env
, কিন্তু যে যুক্তিসঙ্গতভাবে সার্বজনীন বলে মনে হয়।
সুবিধাটি হ'ল এটি ব্যবহারকারীর প্রথমে দোভাষীর যে কোনও সংস্করণ প্রদর্শিত হবে $PATH
। অসুবিধা এটা পূজা যেটা অনুবাদক সংস্করণ ব্যবহারকারীর প্রথম প্রদর্শিত হয় $PATH
।
উদাহরণস্বরূপ, ধরুন আমি perl
আমার হোম ডিরেক্টরিতে যেমন একটি ব্যক্তিগত বিল্ড ইনস্টল করেছি $HOME/bin/perl
এবং যেমন $HOME/bin
আমার সামনে রয়েছে $PATH
। আমি যদি কোনও স্ক্রিপ্ট চালাই তবে যার শেবাং
#!/usr/bin/env perl
তাহলে এটি আমার নিজের ইনস্টলড perl
এক্সিকিউটেবলের সাথে চালানো হবে - যা ভাল জিনিস নাও হতে পারে। স্ক্রিপ্টটির লেখক সম্ভবত এটি এক মাস আগে উত্স থেকে তৈরি করা ব্লিডিং-এজ পার্ল দিয়ে পরীক্ষা করেছেন না।
পার্ল বা বাশের মতো কিছু যা সম্ভবত বেশিরভাগ সিস্টেমে ( /usr/bin/perl
এবং /bin/bash
যথাক্রমে) একটি সামঞ্জস্যপূর্ণ স্থানে ইনস্টল হওয়ার সম্ভাবনা রয়েছে , আমি কমান্ডের সরাসরি পথটি ব্যবহার করব। বিভিন্ন সিস্টেমে আরও আলাদাভাবে ইনস্টল করা যেতে পারে এমন আরও কিছু অস্পষ্টতার জন্য, আমি হয় /usr/bin/env
কৌশলটি ব্যবহার করব, অথবা আমি কোনও ইনস্টলার লিখব যা স্ক্রিপ্ট ইনস্টল হওয়ার সাথে সাথে শেবাং লাইন সামঞ্জস্য করে। (আমার পার্ল স্ক্রিপ্টগুলির জন্য আমি এটি করতাম))
আপডেট: আমি একটি বিট আরো বিস্তারিত মধ্যে এগিয়ে গেছেন তা এই উত্তর করতে এই প্রশ্নের উপর ইউনিক্স ও লিনাক্স সাইটে ।
#!/usr/bin/perl
ব্যবহার use strict; use warnings;
না করে ব্যবহার করা #!/usr/bin/perl -w
। তবে -T
শেবাংয়ে থাকতে হবে।
#!
লাইনের চিকিত্সা ব্যবহার করে না $PATH
। আপনাকে দোভাষীর পথ নির্দিষ্ট করতে হবে। (আমি কেবল বুঝতে পেরেছি, কমপক্ষে আমার সিস্টেমে এটি একটি আপেক্ষিক পথ হতে পারে তবে এটি খুব কমই কার্যকর))
সেরা অনুশীলন হ'ল:
#!/usr/bin/env bash
#!/usr/bin/env sh
#!/usr/bin/env python
এবং আরও ...
উবুন্টু যখন প্রথম ড্যাশ ব্যবহার শুরু করল তখন কিছু স্ক্রিপ্ট ভেঙে গেল। এটি নিয়ে আলোচনা হয়েছিল। বেশিরভাগ স্ক্রিপ্ট লিখিত #!/bin/sh
ছিল যা / বিন / বাশের লিঙ্ক ছিল। Theকমত্যটি হ'ল: স্ক্রিপ্ট লেখক দোভাষীকে নির্দিষ্ট করার জন্য দায়বদ্ধ। অতএব, যদি আপনার স্ক্রিপ্টটি সর্বদা BASH এর সাথে আহ্বান করা উচিত তবে এটি পরিবেশ থেকে নির্দিষ্ট করুন। এটি আপনাকে বিভিন্ন ইউনিক্স / লিনাক্স সিস্টেমের চেয়ে পৃথক পৃথক পথটি অনুমান করতে বাঁচায়। এছাড়াও, যদি আগামীকাল / বিন / শ যদি অন্য কোনও শেলের মতো / বিন / উইথশ বা অন্য কোনও অস্তিত্বের লিঙ্ক হয়ে যায় তবে এটি কাজ করবে।
#!/bin/bash
। আমি সম্মত হই যে স্ক্রিপ্ট লেখক দোভাষীকে নির্দিষ্ট করার জন্য দায়বদ্ধ, তবে তার অর্থ হ'ল যদি আপনার দরকার হয় বাশ, বলুন শ না
অবগতির জন্য এটি একটি Shee-ঠুং হয় #!
, আপনি প্রয়োজন #
। কোন স্ক্রিপ্টটি দিয়ে স্ক্রিপ্টটি চালাতে হবে তা সনাক্ত করতে আপনি এই লাইনটি ব্যবহার করেন।
ডিফল্টরূপে, উবুন্টু /bin/sh
ড্যাশের সাথে লিঙ্ক করে
ড্যাশ সম্পর্কে আপনি কতটা জানতে পছন্দ করতে পারেন এবং সিস্টেম বা ডিমন শেলগুলির জন্য ড্যাশ কেন ব্যবহৃত হয় তা নির্ভর করে:
বেশিরভাগ লিনাক্স ব্যবহারকারীদের দ্বারা ব্যাশ ব্যবহৃত ডিফল্ট শেল এবং এরপরে ড্যাশ বিভিন্ন বৈশিষ্ট্য রয়েছে। ড্যাশ দিয়ে চালানো হলে বাশের জন্য লিখিত স্ক্রিপ্টটি সঠিকভাবে চলতে পারে বা নাও যেতে পারে, স্ক্রিপ্টটি যত কম চালিত হবে তত জটিল।
পার্ল, অজগর ইত্যাদির জন্য লিখিত স্ক্রিপ্ট /bin/sh
বা এর সাথে মোটেও চলবে না /bin/bash
।
সুতরাং আপনি যখন কোনও স্ক্রিপ্ট লিখবেন, তখন আপনি শিট-ব্যাংয়ের সাথে কোন দোভাষী ব্যবহার করা উচিত তা সনাক্ত করতে পারবেন
কী ব্যবহার করবেন তা নির্বাচন স্ক্রিপ্টের লেখক দ্বারা তৈরি করা হয়েছে, এবং অন্যটি এর চেয়ে ভাল আর নয়, সেগুলির বিভিন্ন বৈশিষ্ট্য, সুবিধা এবং অসুবিধা রয়েছে।