শেবাংয়ের কোন ধরণের পথটি সবচেয়ে বেশি পছন্দনীয়?


20

স্ক্রিপ্টগুলিতে, প্রথম লাইনে দোভাষীর পথ নির্দিষ্ট করা উচিত।
তবে বিভিন্ন সার্ভারে লিনাক্স, ইউনিক্স বা বিএসডি-তে এই পথটি আলাদা হতে পারে।

এর চেয়ে ভাল আর কী?

#!/usr/bin/env bash 

অথবা

#!/bin/bash 

উত্তর:


22

আপনি যদি কোনও নির্দিষ্ট স্থানে ইনস্টলৃত কোনও দোভাষী দের সিস্টেম ইনস্টলড সংস্করণটি ব্যবহার করতে চান তবে সরাসরি পথটি ব্যবহার করুন। আপনি যদি দোভাষীর যে কোনও সংস্করণ ব্যবহারকারীর প্রথমে প্রদর্শিত হয় তবে $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 / env রুবি [/ কোড] বহনযোগ্যতার জন্য! কেউ কেউ উল্লেখ করেছেন যে রুবি ইন্টারপ্রেটার, যেমন '-w' এর কাছে কমান্ড-লাইন যুক্তি সরবরাহ করা কঠিন করে তোলে যা পার্লের জন্যও সমস্যা হয়ে দাঁড়াবে।
বিগভোগান

@ বিজিভিউঘান পার্লের জন্য, আজকাল কেবল useতিহ্যবাহী, কেবল স্ক্রিপ্টের শিরোনামে #!/usr/bin/perlব্যবহার use strict; use warnings;না করে ব্যবহার করা #!/usr/bin/perl -w। তবে -Tশেবাংয়ে থাকতে হবে।
কিথ থম্পসন

তাহলে আমরা যদি পথে প্রথমটি চাই তবে কেন #! পার্ল ব্যবহার করবেন না?
Wheredidthatnamecomefrom

@ ওরিডিডট্যাটনেমফর্ম: কারণ এটি কার্যকর হয় না। #!লাইনের চিকিত্সা ব্যবহার করে না $PATH। আপনাকে দোভাষীর পথ নির্দিষ্ট করতে হবে। (আমি কেবল বুঝতে পেরেছি, কমপক্ষে আমার সিস্টেমে এটি একটি আপেক্ষিক পথ হতে পারে তবে এটি খুব কমই কার্যকর))
কিথ থম্পসন

6

সেরা অনুশীলন হ'ল:

#!/usr/bin/env bash 
#!/usr/bin/env sh
#!/usr/bin/env python

এবং আরও ...

উবুন্টু যখন প্রথম ড্যাশ ব্যবহার শুরু করল তখন কিছু স্ক্রিপ্ট ভেঙে গেল। এটি নিয়ে আলোচনা হয়েছিল। বেশিরভাগ স্ক্রিপ্ট লিখিত #!/bin/shছিল যা / বিন / বাশের লিঙ্ক ছিল। Theকমত্যটি হ'ল: স্ক্রিপ্ট লেখক দোভাষীকে নির্দিষ্ট করার জন্য দায়বদ্ধ। অতএব, যদি আপনার স্ক্রিপ্টটি সর্বদা BASH এর সাথে আহ্বান করা উচিত তবে এটি পরিবেশ থেকে নির্দিষ্ট করুন। এটি আপনাকে বিভিন্ন ইউনিক্স / লিনাক্স সিস্টেমের চেয়ে পৃথক পৃথক পথটি অনুমান করতে বাঁচায়। এছাড়াও, যদি আগামীকাল / বিন / শ যদি অন্য কোনও শেলের মতো / বিন / উইথশ বা অন্য কোনও অস্তিত্বের লিঙ্ক হয়ে যায় তবে এটি কাজ করবে।


ড্যাশ সমস্যার জন্য সুস্পষ্ট বিকল্প সমাধানটি লিখতে হয়েছিল #!/bin/bash। আমি সম্মত হই যে স্ক্রিপ্ট লেখক দোভাষীকে নির্দিষ্ট করার জন্য দায়বদ্ধ, তবে তার অর্থ হ'ল যদি আপনার দরকার হয় বাশ, বলুন শ না
মার্টিন বোনার মনিকা

1

অবগতির জন্য এটি একটি Shee-ঠুং হয় #!, আপনি প্রয়োজন #। কোন স্ক্রিপ্টটি দিয়ে স্ক্রিপ্টটি চালাতে হবে তা সনাক্ত করতে আপনি এই লাইনটি ব্যবহার করেন।

ডিফল্টরূপে, উবুন্টু /bin/shড্যাশের সাথে লিঙ্ক করে

ড্যাশ সম্পর্কে আপনি কতটা জানতে পছন্দ করতে পারেন এবং সিস্টেম বা ডিমন শেলগুলির জন্য ড্যাশ কেন ব্যবহৃত হয় তা নির্ভর করে:

সাইবারসিটি.বিজ ড্যাশ

উবুন্টু ড্যাশ ম্যান পেজ

বেশিরভাগ লিনাক্স ব্যবহারকারীদের দ্বারা ব্যাশ ব্যবহৃত ডিফল্ট শেল এবং এরপরে ড্যাশ বিভিন্ন বৈশিষ্ট্য রয়েছে। ড্যাশ দিয়ে চালানো হলে বাশের জন্য লিখিত স্ক্রিপ্টটি সঠিকভাবে চলতে পারে বা নাও যেতে পারে, স্ক্রিপ্টটি যত কম চালিত হবে তত জটিল।

পার্ল, অজগর ইত্যাদির জন্য লিখিত স্ক্রিপ্ট /bin/shবা এর সাথে মোটেও চলবে না /bin/bash

সুতরাং আপনি যখন কোনও স্ক্রিপ্ট লিখবেন, তখন আপনি শিট-ব্যাংয়ের সাথে কোন দোভাষী ব্যবহার করা উচিত তা সনাক্ত করতে পারবেন

কী ব্যবহার করবেন তা নির্বাচন স্ক্রিপ্টের লেখক দ্বারা তৈরি করা হয়েছে, এবং অন্যটি এর চেয়ে ভাল আর নয়, সেগুলির বিভিন্ন বৈশিষ্ট্য, সুবিধা এবং অসুবিধা রয়েছে।


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