#! / Usr / বিন / পাইথন 3 এর উদ্দেশ্য


160

আমি এটি বেশ কয়েকটি স্ক্রিপ্টিং ভাষায় লক্ষ্য করেছি, তবে এই উদাহরণে আমি পাইথন ব্যবহার করছি। অনেক টিউটোরিয়ালে, তারা #!/usr/bin/python3প্রথম লাইনে শুরু করবে । আমাদের কেন এই আছে তা আমি বুঝতে পারি না।

  • অপারেটিং সিস্টেমটিকে এটি অজগর স্ক্রিপ্টটি জানা উচিত নয় (স্পষ্টতই এটি ইনস্টল হওয়ার পরে আপনি এটির কোনও উল্লেখ করছেন)
  • যদি ব্যবহারকারী কোনও অপারেটিং সিস্টেম ব্যবহার করে যা ইউনিক্স ভিত্তিক নয়
  • ভাষা যে কোনও কারণেই ভিন্ন ফোল্ডারে ইনস্টল করা আছে
  • ব্যবহারকারীর একটি আলাদা সংস্করণ রয়েছে। বিশেষত যখন এটি সম্পূর্ণ সংস্করণ নম্বর নয় (পাইথন 3 বনাম পাইথন 32 এর মতো)

যদি কিছু থাকে তবে উপরের তালিকাভুক্ত কারণে অজগর স্ক্রিপ্টটি আমি এটি দেখতে পেলাম।



9
আমি এই প্রশ্নে এসেছি কেবল শেবাংয়ের স্ট্রিংটি অনুলিপি করতে।
omejerk

উত্তর:


260

#!/usr/bin/python3একটি শেবাং লাইন

একটি শেবাং লাইন সংজ্ঞা দেয় যেখানে দোভাষী পাওয়া যায়। এই ক্ষেত্রে, python3দোভাষীটি অবস্থিত /usr/bin/python3। একটি কুঁড়েঘর লাইন একটি হতে পারে bash, ruby, perlবা অন্য কোন স্ক্রিপ্টিং ভাষায় 'ব্যাখ্যাকারী, উদাহরণস্বরূপ: #!/bin/bash

শেবাং লাইন ছাড়া অপারেটিং সিস্টেমটি এটি অজগর স্ক্রিপ্টটি জানে না, এমনকি আপনি স্ক্রিপ্টে এক্সিকিউশন পতাকাটি সেট করে এবং এটির মতো চালান ./script.py। পাইথন 3-তে স্ক্রিপ্টটি ডিফল্টরূপে চালিত করতে, এটি এটিকে অনুরোধ করুন python3 script.pyবা শেবাং লাইন সেট করুন।

#!/usr/bin/env python3বিভিন্ন জায়গায় ভাষা অনুবাদক ইনস্টল করার ক্ষেত্রে আপনি বিভিন্ন সিস্টেমে পোর্টেবিলিটির জন্য ব্যবহার করতে পারেন ।


8
তাহলে #! /usr/bin/env python3কি বেছে নেওয়া উচিত #! /usr/bin/python3?
উইঙ্কলারr

3
@ উইঙ্কলারr হ্যাঁ, এটি আরও ব্যাপকভাবে ব্যবহৃত হয়।
মেরেএম

20

এটিকে হ্যাশ-ব্যাং বলে। আপনি যদি শেল থেকে স্ক্রিপ্টটি চালনা করেন তবে স্ক্রিপ্টটি ব্যাখ্যা করার জন্য কোন প্রোগ্রামটি শুরু করা উচিত তা নির্ধারণের জন্য এটি প্রথম লাইনটি পরীক্ষা করে।

কোনও ইউনিক্স ভিত্তিক ওএস স্ক্রিপ্টটি কীভাবে চালাতে হয় তা নির্ধারণের জন্য নিজস্ব নিয়ম ব্যবহার করবে। উদাহরণস্বরূপ উইন্ডোজ ফাইলের নাম এক্সটেনশন ব্যবহার করবে এবং #কারণটি প্রথম লাইনটিকে একটি মন্তব্য হিসাবে বিবেচনা করবে।

যদি পাইথন এক্সিকিউটেবলের পথটি ভুল হয় তবে স্বাভাবিকভাবেই স্ক্রিপ্টটি ব্যর্থ হয়। স্ট্যান্ডার্ড কনভেনশন দ্বারা নির্দিষ্ট করা যেকোন অবস্থান থেকে প্রকৃত এক্সিকিউটেবলের লিঙ্কগুলি তৈরি করা সহজ।


12

এই লাইনটি স্ক্রিপ্টটি চালাবে এমন প্রোগ্রাম নির্বাহযোগ্য খুঁজে পেতে সহায়তা করে। এই শেবাং স্বরলিপি বেশিরভাগ স্ক্রিপ্টিং ভাষায় (কমপক্ষে প্রাপ্ত বয়স্ক অপারেটিং সিস্টেমগুলিতে ব্যবহৃত হয়) জুড়ে আদর্শ is

এই লাইনের একটি গুরুত্বপূর্ণ দিকটি নির্দিষ্ট করে দিচ্ছে যে কোন দোভাষী ব্যবহার করা হবে। উদাহরণস্বরূপ, বহু উন্নয়নকেন্দ্রিক লিনাক্স বিতরণে পাইথনের কয়েকটি সংস্করণ একই সাথে ইনস্টল করা স্বাভাবিক।

পাইথন 2.x এবং পাইথন 3 100% সামঞ্জস্যপূর্ণ নয়, সুতরাং এই পার্থক্যটি খুব গুরুত্বপূর্ণ হতে পারে। সুতরাং #! /usr/bin/pythonএবং #! /usr/bin/python3একই নয় (এবং #! /usr/bin/env python3এই পৃষ্ঠায় অন্য কোথাও উল্লিখিত হিসাবে একদম একই নয় ।


6
  1. এবং এই লাইন কিভাবে হয়

  2. এটি উপেক্ষা করা হয়।

  3. এটি চালাতে ব্যর্থ হবে এবং যথাযথ অবস্থানের দিকে নির্দেশ করার জন্য এটি পরিবর্তন করা উচিত। বা envব্যবহার করা উচিত।

  4. এটি চালাতে ব্যর্থ হবে এবং সম্ভবত নির্বিশেষে ভিন্ন সংস্করণে চলতে ব্যর্থ হবে।


3

শিবাং লাইনটি উইন্ডোগুলির জন্য কীভাবে কাজ করে তা স্পষ্ট করতে, 3.7 পাইথন ডক থেকে :

  • স্ক্রিপ্ট ফাইলের প্রথম লাইনটি যদি #! দিয়ে শুরু হয়, তবে এটি "শেবাং" লাইন হিসাবে পরিচিত। লিনাক্স এবং অন্যান্য ইউনিক্সের মতো অপারেটিং সিস্টেমগুলিতে এ জাতীয় লাইনের জন্য স্থানীয় সমর্থন রয়েছে এবং স্ক্রিপ্টটি কীভাবে কার্যকর করা উচিত তা নির্দেশ করার জন্য এগুলি সাধারণত এ জাতীয় সিস্টেমে ব্যবহৃত হয়।
  • উইন্ডোজ জন্য পাইথন লঞ্চার উইন্ডোজের পাইথন স্ক্রিপ্টগুলির সাথে একই সুবিধা ব্যবহারের অনুমতি দেয়
  • পাইথন স্ক্রিপ্টগুলিতে শেবাং লাইনগুলি ইউনিক্স এবং উইন্ডোজের মধ্যে পোর্টেবল হতে দেয়, লঞ্চারটি কোন দোভাষী ব্যবহার করতে হবে তা নির্দিষ্ট করার জন্য বেশ কয়েকটি 'ভার্চুয়াল' কমান্ড সমর্থন করে। সমর্থিত ভার্চুয়াল কমান্ডগুলি হ'ল:
    • / usr / বিন / এনভিভ পাইথন
      • শেবাং লাইনের / usr / bin / env ফর্মের আরও একটি বিশেষ সম্পত্তি রয়েছে। ইনস্টলড পাইথন দোভাষীকে অনুসন্ধান করার আগে, এই ফর্মটি পাইথন এক্সিকিউটেবলের জন্য এক্সিকিউটেবল PATH অনুসন্ধান করবে। এটি ইউনিক্স এনভির প্রোগ্রামের আচরণের সাথে মিলে যায়, যা একটি PATH অনুসন্ধান সম্পাদন করে।
    • , / Usr / bin / python-
    • , / Usr / স্থানীয় / bin / python-
    • পাইথন

2

আসলে ফাইলটি কী ধরণের ফাইল নির্ধারণ করা খুব জটিল, তাই এখন অপারেটিং সিস্টেমটি কেবল এটি জানতে পারে না। এটি এর উপর ভিত্তি করে প্রচুর অনুমান করতে পারে -

  • প্রসার
  • ইউটিআই
  • এমআইএমই

কিন্তু কমান্ড লাইনটি এগুলি নিয়ে মোটেই বিরক্ত করে না, কারণ এটি সীমিত পিছনের সামঞ্জস্যপূর্ণ স্তরের উপর চলে, যখন থেকে অভিনব বাজে কিছুই বোঝায় না। আপনি যদি এটির উপর ডাবল ক্লিক করেন তবে একটি আধুনিক ওএস এটি অনুমান করতে পারে- তবে আপনি যদি এটি টার্মিনাল থেকে চালান তবে না, কারণ টার্মিনালটি আপনার অভিনব ওএস নির্দিষ্ট ফাইল টাইপিং এপিআইএস সম্পর্কে চিন্তা করে না।

অন্যান্য বিষয় সম্পর্কে। এটি একটি সুবিধা, এটি একইভাবে চালানো সম্ভব

python3 path/to/your/script

যদি আপনার অজগরটি নির্দিষ্ট পথে না থাকে, তবে এটি কাজ করবে না, তবে আমরা অন্য কোনও উপায়ে নয়, এই কাজের মতো জিনিস তৈরির জন্য জিনিসগুলি ইনস্টল করার ঝোঁক। আপনি যদি * নিক্সের নীচে থাকেন তবে এটি গুরুত্বপূর্ণ নয়, এই লাইনটি বিবেচনা করা উচিত কিনা এটি আপনার শেলের উপর নির্ভর করে কারণ এটি একটি shellcode। সুতরাং উদাহরণস্বরূপ আপনি bashউইন্ডোজ অধীনে চালাতে পারেন ।

আপনি আসলে এই লাইনটি পুরোপুরি বাদ দিতে পারেন, এর অর্থ হ'ল কলারকে একজন দোভাষী দিতে হবে। আপনার দোভাষীকে অমানুষিক স্থানে না রাখুন এবং তারপরে কোনও দোভাষী না দিয়ে স্ক্রিপ্টগুলিতে কল করার চেষ্টা করুন।

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