আমি এটি জানি, এটি ভুলে যান এবং আবার এটিকে পুনরায় জ্ঞাত করুন। এটা লিখে সময়।
আমি এটি জানি, এটি ভুলে যান এবং আবার এটিকে পুনরায় জ্ঞাত করুন। এটা লিখে সময়।
উত্তর:
একটি নির্বাহযোগ্য 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 -exuhashbang পর পরিবর্তে।
এই পদ্ধতির আরও একটি সুবিধা রয়েছে: কিছু সিস্টেম একটি দিয়ে জাহাজ চালাতে পারে /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_namebash script_name./script_nameদ্রষ্টব্য : -আপনি 'ls -a' ব্যবহার করে ফাইলটি নির্বাহযোগ্য কিনা তা পরীক্ষা করতে পারবেন
সামান্য সংযোজন, একই ফোল্ডার থেকে একটি অনুবাদক চালাতে, স্ক্রিপ্টগুলিতে এখনও #! হ্যাশবাং ব্যবহার করে ।
উদাহরণস্বরূপ, একটি পিএইচপি 7.2 এক্সিকিউটেবল / ইউএসআর / বিন থেকে অনুলিপি করা হ্যালো স্ক্রিপ্টের সাথে একটি ফোল্ডারে রয়েছে ।
#!./php7.2
<?php
echo "Hello!";
এটি চালানোর জন্য:
./hello
যা ঠিক তেমন সমান আচরণ করে:
./php7.2 hello