UNIX শেল স্ক্রিপ্টে "#! / Bin / sh" রেখার অর্থ কী?


142

আমি কয়েকটি শেল স্ক্রিপ্ট টিউটোরিয়াল দিয়ে যাচ্ছিলাম এবং নিম্নলিখিত নমুনা প্রোগ্রামটি পেয়েছি:

#!/bin/sh
clear
echo "HELLO WORLD"

কেউ দয়া করে আমাকে বলতে পারেন #!/bin/shশুরুতে মন্তব্যটির তাত্পর্যটি কী?



2
জিজ্ঞাসাবাবু সম্পর্কে ভাল ব্যাখ্যা: জিজ্ঞাসাবাবু
প্রশ্ন /


উত্তর:


143

এটিকে শেবাং বলা হয় এবং স্ক্রিপ্টটি কার্যকর করতে কোন দোভাষী ব্যবহার করা উচিত তা পিতামাতাকে বলে tells

যেমন

#!/usr/bin/perl   <--perl script'
#!/usr/bin/php <-- php script
#!/bin/false <--- do-nothing script, because false returns immediately anyways.

এটি একটি মন্তব্য হিসাবে কার্যকর করা হয়েছে যাতে সেই লাইনে যে কোনও কিছুই নির্দিষ্ট করা দোভাষীটির সাথে "প্রাসঙ্গিক" না হয়। উদাহরণস্বরূপ, সমস্ত স্ক্রিপ্টিং ভাষার বোঝার প্রবণতা রয়েছে যে শুরু হওয়া একটি লাইন #একটি মন্তব্য, এবং !/usr/bin/whateverঅংশটিকে উপেক্ষা করবে , যা অন্যথায় particular নির্দিষ্ট ভাষায় একটি বাক্য গঠন ত্রুটি হতে পারে।


6
এটি সাধারণত কার্নেল, শেল নয়, যা এটি প্রক্রিয়া করে। শেলটি সহজেই exec()ফাইলটিতে সিস্টেমে কল দেয়।
ট্রিপলি

47

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

#!ম্যাজিক নম্বর 0x2321 এর সাথে মিল রয়েছে (এটি একটি এসিআই টেবিলটিতে দেখুন)। যখন সিস্টেমটি দেখেছে যে ম্যাজিক নম্বরটি, তখন এটি জেনে যায় যে এটি একটি পাঠ্য স্ক্রিপ্ট নিয়ে কাজ করছে এবং পরবর্তী পর্যন্ত পড়বে \n(একটি সীমা রয়েছে, তবে এটি আমার থেকে দূরে থাকে)। দোভাষীকে সনাক্ত করার পরে (শেবাংয়ের পরে প্রথম যুক্তি) এটি দোভাষীকে ডাকবে।

অন্যান্য ফাইলগুলিতেও ম্যাজিক নম্বর রয়েছে। এর মাধ্যমে একটি বিটম্যাপ (.BMP) ফাইলটি দেখার চেষ্টা করুন lessএবং আপনি প্রথম দুটি অক্ষরটি দেখতে পাবেন BM। এই ম্যাজিক নম্বরটি বোঝায় যে ফাইলটি আসলে একটি বিটম্যাপ।


10

যদি এই স্ক্রিপ্টটিতে যে ফাইলটি থাকে তার ফাইল যদি কার্যকর হয় তবে হ্যাশ-ব্যাং ( #!) অপারেটিং সিস্টেমকে স্ক্রিপ্টটি চালানোর জন্য কোন দোভাষী ব্যবহার করতে হবে তা জানিয়ে দেয়। এই ক্ষেত্রে এটি /bin/shউদাহরণস্বরূপ।

আরও তথ্যের জন্য এটি সম্পর্কে একটি উইকিপিডিয়া নিবন্ধ আছে।


5

প্রথম লাইনটি শেলটিকে বলে যে আপনি যদি স্ক্রিপ্টটি সরাসরি (./run.sh; / bin / sh run.sh এর বিপরীতে) সম্পাদন করেন তবে এর প্রোগ্রামটি (/ বিন / sh এই ক্ষেত্রে ব্যবহার করা উচিত) এটির ব্যাখ্যা করতে।

আপনি এটি আর্গুমেন্টগুলি পাস করার জন্যও ব্যবহার করতে পারেন, সাধারণত - ((ত্রুটি থেকে বেরিয়ে আসা)), বা অন্যান্য প্রোগ্রামগুলি (/ বিন / অ্যাজক, / ইউএসআর / বিন / পার্ল ইত্যাদি) ব্যবহার করতে পারেন।


-4

#!/bin/shঅথবা #!/bin/bashস্ক্রিপ্টের প্রথম লাইন হতে হবে কারণ আপনি যদি এটি প্রথম লাইনে ব্যবহার না করেন তবে সিস্টেমটি সেই লিপির সমস্ত কমান্ডকে আলাদা আলাদা কমান্ড হিসাবে বিবেচনা করবে। যদি প্রথম লাইনটি হয় #!/bin/shতবে এটি সমস্ত কমান্ডকে একটি স্ক্রিপ্ট হিসাবে বিবেচনা করবে এবং এটি দেখিয়ে দেবে যে এই ফাইলটি psকমান্ডের মধ্যে চলছে , ফাইলের অভ্যন্তরে কমান্ডগুলি নয়।

./echo.sh

ps -ef |grep echo
trainee   3036  2717  0 16:24 pts/0    00:00:00 /bin/sh ./echo.sh
root      3042  2912  0 16:24 pts/1    00:00:00 grep --color=auto echo

1
স্ট্যাক ওভারফ্লো টুইটার নয়। "ইউ" এবং "1 ম" এর মতো শব্দটির বানান করতে দয়া করে সময় নিন। আপনি একটি রেফারেন্স বই লিখতে সহায়তা করছেন যাতে সঠিক ব্যাকরণ এবং বানান তাৎপর্যপূর্ণ। এছাড়াও, সঠিক বিন্যাসে মনোযোগ দিন। কমান্ড-লাইন থেকে জারি করা কমান্ডগুলি psএবং এর মতো কোড অংশগুলি #!/bin/shবিন্যাস করা উচিত।
টিন ম্যান

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