আমি এটি জানি, এটি ভুলে যান এবং আবার এটিকে পুনরায় জ্ঞাত করুন। এটা লিখে সময়।
আমি এটি জানি, এটি ভুলে যান এবং আবার এটিকে পুনরায় জ্ঞাত করুন। এটা লিখে সময়।
উত্তর:
একটি নির্বাহযোগ্য sh
স্ক্রিপ্ট চালাতে , ব্যবহার করুন:
sh myscript
একটি নির্বাহযোগ্য bash
স্ক্রিপ্ট চালাতে , ব্যবহার করুন:
bash myscript
এক্সিকিউটেবল (যা এক্সিকিউটেবল অনুমতি সহ কোনও ফাইল) শুরু করতে; আপনি কেবল এটির পথ দ্বারা নির্দিষ্ট করেছেন:
/foo/bar
/bin/bar
./bar
একটি স্ক্রিপ্ট কার্যকর কার্যকর করতে, এটি প্রয়োজনীয় অনুমতি দিন:
chmod +x bar
./bar
যখন কোনও ফাইল নির্বাহযোগ্য হয় তখন কার্নেলটি এটি সম্পাদন করার পদ্ধতি নির্ধারণের জন্য দায়বদ্ধ। নন-বাইনারিগুলির জন্য, এটি ফাইলের প্রথম লাইনটি দেখে। এটিতে একটি থাকা উচিত hashbang
:
#! /usr/bin/env bash
হ্যাশব্যাং কার্নেলকে জানায় যে কোন প্রোগ্রামটি চালানো উচিত (এই ক্ষেত্রে কমান্ডটি /usr/bin/env
যুক্তি দিয়ে চালানো হয় bash
)। তারপরে, স্ক্রিপ্টটি পরবর্তী আর্গুমেন্ট হিসাবে আপনি সমস্ত আর্গুমেন্ট হিসাবে স্ক্রিপ্টটি দিয়েছিলেন (দ্বিতীয় তর্ক হিসাবে) to
এর অর্থ নির্বাহযোগ্য প্রতিটি স্ক্রিপ্টের একটি হ্যাশব্যাং থাকা উচিত । যদি না হয়, আপনি কার্নেল এটা কি বলছ না হয় , সেইজন্য এবং কার্নেল কি প্রোগ্রামটি দোভাষীর কাজ ব্যবহার করতে জানে না। এটা হতে পারে bash
, perl
, python
, sh
, নাকি অন্য কিছু। (বাস্তবে, কার্নেলটি প্রায়শই ফাইলটির ব্যাখ্যার জন্য ব্যবহারকারীর ডিফল্ট শেলটি ব্যবহার করে যা খুব বিপজ্জনক কারণ এটি সঠিক দোভাষী হতে পারে না বা এটি কিছুটিকে বিশ্লেষণ করতে সক্ষম হতে পারে তবে সূক্ষ্ম আচরণগত পার্থক্য যেমন যেমন মধ্যে কেস sh
এবং bash
)।
/usr/bin/env
সর্বাধিক সাধারণভাবে আপনি হ্যাশ bangs দেখতে পাবেন:
#!/bin/bash
ফলস্বরূপ যে কার্নেল /bin/bash
স্ক্রিপ্টটি ব্যাখ্যা করার জন্য প্রোগ্রামটি চালাবে । দুর্ভাগ্যক্রমে, bash
সর্বদা ডিফল্টরূপে প্রেরণ করা হয় না এবং এটি সর্বদা পাওয়া যায় না /bin
। যদিও লিনাক্স মেশিনে এটা সাধারণত তাই হয়, সেখানে অন্যান্য POSIX মেশিন যেখানে একটি সীমার হয় bash
যেমন বিভিন্ন অবস্থানগুলি, জাহাজ /usr/xpg/bin/bash
বা /usr/local/bin/bash
।
একটি পোর্টেবল বাশ স্ক্রিপ্ট লিখতে, আমরা তাই bash
প্রোগ্রামের অবস্থানের হার্ড-কোডিংয়ের উপর নির্ভর করতে পারি না । POSIX ইতিমধ্যে যে মোকাবেলার জন্য একটি প্রক্রিয়া আছে: PATH
। ধারণাটি হ'ল আপনি আপনার প্রোগ্রামগুলি যে কোনও একটি ডিরেক্টরিতে ইনস্টল করেছেন PATH
এবং আপনার নামটি চালাতে চাইলে সিস্টেমটি আপনার প্রোগ্রামটি সন্ধান করতে সক্ষম হবে।
দুঃখের বিষয়, আপনি কেবল এটি করতে পারবেন না :
#!bash
কার্নেলটি আপনার জন্য কোনও PATH
অনুসন্ধান করবে না । এমন একটি প্রোগ্রাম রয়েছে যা PATH
আপনাকে অনুসন্ধান করতে পারে, যদিও এটি বলা হয় env
। ভাগ্যক্রমে, প্রায় সমস্ত সিস্টেমে একটি env
প্রোগ্রাম ইনস্টল করা আছে /usr/bin
। সুতরাং আমরা env
একটি হার্ডকোডযুক্ত পথটি ব্যবহার শুরু করি যা এরপরে PATH
অনুসন্ধান করে bash
এটি চালায় যাতে এটি আপনার স্ক্রিপ্টটির ব্যাখ্যা করতে পারে:
#!/usr/bin/env bash
এই পদ্ধতির একটি খারাপ দিক রয়েছে: পসিক্সের মতে, হ্যাশব্যাংয়ের একটি যুক্তি থাকতে পারে । এই ক্ষেত্রে, আমরা প্রোগ্রামটির bash
যুক্তি হিসাবে ব্যবহার করি env
। এর মানে হল যে আমাদের পক্ষে যুক্তি দেওয়ার পক্ষে কোনও স্থান নেই bash
। সুতরাং #!/bin/bash -exu
এই স্কিম মত কিছু রূপান্তর করার কোন উপায় নেই । আপনি করা হবে set -exu
hashbang পর পরিবর্তে।
এই পদ্ধতির আরও একটি সুবিধা রয়েছে: কিছু সিস্টেম একটি দিয়ে জাহাজ চালাতে পারে /bin/bash
, তবে ব্যবহারকারী এটি পছন্দ করতে পারে না, এটি বাগি বা পুরানো খুঁজে পেতে পারে এবং bash
অন্য কোনও জায়গায় তার নিজস্ব ইনস্টল করে থাকতে পারে । এটি প্রায়শই ওএস এক্স (ম্যাকস) এর ক্ষেত্রে দেখা যায় যেখানে অ্যাপল পুরানো একটি জাহাজ পাঠায় /bin/bash
এবং ব্যবহারকারীরা /usr/local/bin/bash
হোমব্রিউয়ের মতো কিছু ব্যবহার করে একটি আপ টু ডেট ইনস্টল করে। আপনি যখন অনুসন্ধানটি env
করে এমন পদ্ধতির ব্যবহার করেন PATH
, আপনি ব্যবহারকারীর পছন্দটিকে বিবেচনায় রাখেন এবং তার সিস্টেমটি যেটি প্রেরণ করেছেন তার উপর তার পছন্দের ব্যাশ ব্যবহার করুন।
zsh
আমার শেল হিসাবে ব্যবহার করি তবে আমি কি এটি ব্যবহার করব hashbang
#! /usr/bin/env zsh
?
#! /usr/bin/env zsh
কোডটি যদি জেড শেল দ্বারা কার্যকর করা হয় তবে আপনার ব্যবহার করা উচিত।
বোর্ন শেল জন্য:
sh myscript.sh
ব্যাশের জন্য:
bash myscript.sh
আপনি যদি বর্তমান শেলটিতে স্ক্রিপ্টটি চলতে চান (যেমন আপনি এটি আপনার ডিরেক্টরি বা পরিবেশকে প্রভাবিত করতে চান) আপনার উচিত:
. /path/to/script.sh
অথবা
source /path/to/script.sh
লক্ষ্য করুন /path/to/script.sh
আপেক্ষিক হতে পারে, উদাহরণস্বরূপ . bin/script.sh
রান script.sh
মধ্যে bin
বর্তমান ডিরেক্টরী অধীনে ডিরেক্টরি।
প্রথমে মৃত্যুদণ্ড কার্যকর করার অনুমতি দিন:
chmod +x script_name
sh script_name
bash script_name
./script_name
দ্রষ্টব্য : -আপনি 'ls -a' ব্যবহার করে ফাইলটি নির্বাহযোগ্য কিনা তা পরীক্ষা করতে পারবেন
সামান্য সংযোজন, একই ফোল্ডার থেকে একটি অনুবাদক চালাতে, স্ক্রিপ্টগুলিতে এখনও #! হ্যাশবাং ব্যবহার করে ।
উদাহরণস্বরূপ, একটি পিএইচপি 7.2 এক্সিকিউটেবল / ইউএসআর / বিন থেকে অনুলিপি করা হ্যালো স্ক্রিপ্টের সাথে একটি ফোল্ডারে রয়েছে ।
#!./php7.2
<?php
echo "Hello!";
এটি চালানোর জন্য:
./hello
যা ঠিক তেমন সমান আচরণ করে:
./php7.2 hello