"শে-ব্যাং" কেন "#!" দিয়ে শুরু হয়?


10

"শে-ব্যাং" কেন একটির #!মতো শুরু হয় #!/bin/bash? আমি সর্বদা গ্রহণ করেছি যে এটি কীভাবে এটি করা হয় তবে এর পিছনে কোনও কারণ আছে কি?

কেন দিয়ে শুরু #; এটা কি সাধারণত মন্তব্য না? বা এটি মন্তব্য করা উচিত যে পয়েন্ট?


4
উইকিপিডিয়ায়#! (ডিএমআর যতটা মনে রাখে ...) এর মোটামুটি বিস্তারিত ইতিহাস রয়েছে, কেন #(হ্যাঁ, রেখাটি বিদ্যমান শাঁস দ্বারা উপেক্ষা করা হয়েছিল) এর একটি ব্যাখ্যা সহ including
গিলস 13'8

উইকিপিডিয়া চেক করতে মিস করেছেন :)
জোহান

1
আমি কেবল এই কামনা করি যে শাঁসগুলি যদি বাইরে থাকে তবে একটি বহিরাগত সিআর / এলএফ
কেটে ফেলার

উত্তর:


16

সাধারণত কুঁড়েঘর শুধু বোঝায় #!( !সাধারণত "ঠুং" বলা হয়, এবং এটি মত "সে" হয় "পরিষ্কার" বা "hash" একটি দুর্নীতি দেখায় #) - পুরো লাইনটি একটি বলা হয় কুঁড়েঘর লাইন

এটি ইচ্ছাকৃতভাবে পিছনে-সামঞ্জস্যের জন্য কোনও মন্তব্য চরিত্র দিয়ে শুরু করে যেগুলি কীভাবে এটি পরিচালনা করতে জানে না; !শুধু ফাইল শুরু একটি র্যান্ডম মন্তব্য থেকে আলাদা, তাদের, তাই একটি ফাইল দিয়ে শুরু হয় সম্ভবতঃ হয় # this is my script!চালানোর চেষ্টা করে না this is my script!ব্যাখ্যাকারী


2
কংগ্রেস !কার্যকর করার জন্য নির্দেশ নির্দেশ করতে প্রায়শই অন্যান্য প্রসঙ্গে ব্যাং ব্যবহৃত হয়। উদাহরণস্বরূপ vimবা অন্যান্য প্রোগ্রামগুলিতে নিজস্ব কমান্ড লাইনের সাহায্যে ব্যাং হ'ল পালানো অক্ষর যা তাদের অভ্যন্তরীণ ইন্টারফেসের পরিবর্তে সিস্টেম শেলের মধ্যে কমান্ড চালায়।
কালেব

4

এটি বুঝতে আপনার অবশ্যই বুঝতে হবে যে স্ক্রিপ্টের প্রথম লাইনটি 2 টি পৃথক প্রোগ্রামের দ্বারা আসলে দুবার পড়েছে । প্রথমবার, কার্নেল ফাইলটি খুলবে এবং #!প্রথম লাইনে character অক্ষরের অনুক্রম ( ) সন্ধান করবে। এটি যদি এটির সন্ধান করে তবে এটি শেল প্রোগ্রামটি চালিত করে যা সেখানে নির্দেশিত রয়েছে, পরামিতি হিসাবে ফাইলের নামটি প্রেরণ করে। (উদাহরণস্বরূপ, ফাইলটি /home/me/fooশুরু হলে #!/bin/sh, কার্নেলটি চলবে /bin/sh /home/me/foo)।

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


এটি কি সত্যিই কার্নেল যা এটি করে, মনে হয় এটি এখন যে শেল আপনি কাজ করছেন তা শেবাংকে বিশ্লেষণ করবে এবং স্ক্রিপ্টটি ধাক্কা দেবে
জোহান

নাহ ... এটি কার্নেল নিজেই, জীবিত এবং ব্যক্তিগতভাবে। আপনি স্ক্রিপ্টটি কার্যকর করতে শেল ব্যবহার না করলেও এটি কাজ করবে ... শেল ছাড়াও ফাইল চালানোর অন্যান্য উপায় রয়েছে ... উদাহরণস্বরূপ, "
এক্সিকিউটিভ

en.wikedia.org/wiki/Shebang_(Unix)# ম্যাজিক_ সংখ্যা "#!" ascii এ বাইটস 0x23 0x21 - যখন এক্সিকিউটিভ () এই বাইটগুলি দেখেন তখন আচরণটি হ'ল বাকী রেখাকে একটি দোভাষীর পথ হিসাবে বিবেচনা করে।
অ্যারন ম্যাকমিলিন

1

এটি একটি মন্তব্য হওয়া প্রয়োজন কারণ কেবল এই পথে এটি "ইন্টারপ্রিটার্নারাম স্ক্রিপ্টনাম" এর মতো স্ক্রিপ্ট চালানোর জন্যও কাজ করবে। "!" এর উত্স সম্পর্কে আমি জানি না।


1
এমনকি যদি আপনি কেবল চালান। / স্ক্রিপ্টনাম, দোভাষী তখনও সে-ব্যাং লাইনটি দেখে, তাই এটির এখনও একটি মন্তব্য হওয়া দরকার।
psusi

1
বা আরও বিস্তারিতভাবে বলা যায়: শেবাং: '#!' দোভাষী দ্বারা না দেখার জন্য ডিজাইন করা হয়েছে - সুতরাং এটি অবশ্যই মন্তব্যের চর '#' দিয়ে শুরু করা উচিত। পরিবর্তে, কার্নেল 'এক্সিকিউটিভ [lv] *' সিস্টেম কলগুলির সেট দ্বারা এটি 'দেখা' (এবং ব্যাখ্যা করা)।
আরিফেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.