মূল বক্তব্যটি হ'ল এক্সটেনশনগুলি ইউনিক্সের মতো সিস্টেম সিস্টেমে অপ্রাসঙ্গিক A একটি ফাইলের নাম স্রেফ নাম এবং স্ক্রিপ্ট বা সংকলিত এক্সিকিউটেবল চালানো যায় কিনা তার কোনও প্রভাব নেই । কোনও প্রোগ্রামার .sh
একটি ফাইল শেল স্ক্রিপ্ট, বা .py
পাইথন স্ক্রিপ্টের জন্য মনোনীত করতে একটি এক্সটেনশন যুক্ত করতে পারে , তবে উইন্ডোজ থেকে ভিন্ন, কোনও ইউনিক্স নামকরণের বিষয়ে চিন্তা করে না, এটি অনুমতিগুলির বিষয়ে চিন্তা করে।
যা গুরুত্বপূর্ণ তা হ'ল কোনও ফাইলকে কার্যকর করা অনুমতি। যা দিয়ে আপনি চেক করতে পারেন
ls -l /path/to/file
এক্সিকিউটেবল চলমান
স্ক্রিপ্ট চালানোর জন্য সাধারণত বিভিন্ন উপায় রয়েছে।
- আপনার বর্তমান ডিরেক্টরি যদি স্ক্রিপ্টের মতো হয় এবং স্ক্রিপ্টে এক্সিকিউটেবল অনুমতি থাকে তবে আপনি এ জাতীয় চালনা করতে পারেন
./my_script_name
। .
বর্তমান ডিরেক্টরী মানে।
- যদি আপনার বর্তমান ডিরেক্টরিটি পৃথক এবং স্ক্রিপ্টের এক্সিকিউটেবল অনুমতি রয়েছে তবে আপনি এটি পুরো পথটি নির্দিষ্ট করে চালাতে পারেন:
/home/user/bin/my_script_name
(উপরের দুটি পদ্ধতি এক্সিকিউটেবল অনুমতি সেট থাকার উপর নির্ভর করে; ফাইলটি $PATH
ভেরিয়েবলের অংশ কিনা তা অপ্রাসঙ্গিক। #!
লাইনের উপস্থিতিও গুরুত্বপূর্ণ; এটি ছাড়া এটি স্ক্রিপ্টটি আপনার খোলার বর্তমান শেল দ্বারা কার্যকর করা হবে If আমার কাছে csh
স্ক্রিপ্ট থাকলে এই লাইনটি ছাড়াই এবং এটির সাথে ব্যাশ চালানোর চেষ্টা করুন ./my_script.csh
, এটি ব্যর্থ হবে)
- যদি আপনার স্ক্রিপ্টটি এমন ডিরেক্টরিতে অবস্থিত যা আপনার
$PATH
ভেরিয়েবলের অংশ , আপনি কেবল নামটি কল করে চালাতে পারেন। আপনি chmod
কেবল কমান্ড লাইনে কমান্ডকে নামটি টাইপ করে কল করতে পারেন কারণ এটি /bin
ফোল্ডারে রয়েছে। /bin
সর্বদা $PATH
পরিবর্তনশীল অংশ । এই ক্ষেত্রে এক্সিকিউটেবল অনুমতি এবং স্ক্রিপ্ট বিষয়টি স্থান
- কমান্ড এবং স্ক্রিপ্টকে আর্গুমেন্ট হিসাবে কোনও দোভাষীকে নির্দিষ্ট করে। এইভাবে স্ক্রিপ্ট ইন্টারপ্রেটারে ইনপুট ফাইল হিসাবে পরিবেশন করবে।
- একটি ফাইল সোর্সিং
. filename.sh
অথবা source filename.sh
স্ক্রিপ্ট চিকিত্সা করা যেমন যদি এটা কীবোর্ড ইনপুট, অর্থাত্ ছিল যেমন যদি এটা কমান্ড লাইন মধ্যে সরাসরি টাইপ করা করতে হবে। এই ক্ষেত্রে এক্সিকিউটেবল অনুমতি এবং অবস্থান গুরুত্বপূর্ণ নয়
উদাহরণ
অনুমতিগুলি সম্পাদনের জন্য দোভাষীর সাথে চলমান # 1 উদাহরণ
$-> ls -l abc.py
-rw-rw-r-- 1 xieerqi xieerqi 44 Apr 27 22:39 abc.py
$-> python abc.py
a
b
c
উদাহরণ # 2, ./
এক্সিকিউটেবল অনুমতি সেট দিয়ে চলছে , শেবাং লাইন সেট।
$-> cat abc.py
#!/usr/bin/env python
for letter in 'a' 'b' 'c' :
print letter
$-> ls -l abc.py
-rwxrwxr-x 1 xieerqi xieerqi 66 Apr 27 23:02 abc.py*
$-> ./abc.py
a
b
c
উদাহরণ # 3, শেবাং লাইন সেট ব্যতীত চলমান (ব্যর্থ হয়, কারণ বাশ পাইথন স্ক্রিপ্টগুলি পড়তে পারে না; কোনও শেবাং লাইন বর্তমান শেলটিকে দোভাষী হিসাবে ধরে নেয় না)
$-> cat abc.py
for letter in 'a' 'b' 'c' :
print letter
$-> ./abc.py
./abc.py: 2: ./abc.py: Syntax error: word unexpected (expecting "do")
উদাহরণ # 4, চলমান স্ক্রিপ্ট যাতে কার্যকরযোগ্য অনুমতি রয়েছে ফর্ম ফোল্ডার যা $PATH
ভেরিয়েবলের অংশ
# /home/xieerqi/bin is part of my path variable
$-> echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/opt/microchip/xc16/v1.25/bin:/opt/microchip/xc32/v1.40/bin:/opt/microchip/xc8/v1.35/bin:/home/xieerqi/bin:/home/xieerqi/bin/sh
$-> # current directory is /home/xieerqi
$-> pwd
/home/xieerqi
$-> # move the file to ~/bin
$-> mv ~/abc.py ~/bin/abc.py
$-> # now I can run it just by calling the name
$-> abc.py
/home/xieerqi/bin/abc.py: 2: /home/xieerqi/bin/abc.py: Syntax error: word unexpected (expecting "do")
$-> # Syntax error because again, no interpreter specified.
$-> # must add #!/usr/bin/env python
$-> vi /home/xieerqi/bin/abc.py
$-> # after adding the line with vi text editor, we can run
$-> abc.py
a
b
c
# 5 উদাহরণ, এক্সটেনশন সরানো, এখনও চালায় কারণ এক্সটেনশানগুলি গুরুত্বপূর্ণ নয়, তবে এটির অনুমতি রয়েছে এবং এর অংশ $PATH
:
$-> mv ~/bin/abc.py ~/bin/abc
$-> abc
a
b
c
.sh
এক্সটেনশন হিসাবে ব্যবহার করা অনেক পরিস্থিতিতে খারাপ অনুশীলন হিসাবে বিবেচিত হয়: এটি অন্য আদেশগুলি কীভাবে নামকরণ করা হয় তার বিপরীতে (আপনি চালাবেন নাls.elf
) এটি প্রায়শই বিভ্রান্তিকর হয় (যদি আপনারfoo.sh
সূচনাটি শুরু হয়#!/bin/bash
, তবে রানিংsh foo.sh
এটির জন্য তৈরির চেয়ে আলাদা দোভাষী দিয়ে চালাবে) ), এবং যদি আপনিfoo.sh
পাইথন প্রোগ্রাম হিসাবে পুনরায় লেখেন , সেই এক্সটেনশনটি ব্যবহার করার অর্থ হ'ল এখন-বিভ্রান্তিকর নামটি রাখা এবং যে প্রোগ্রামটিকে কল করে তা পুনরায় লেখার মধ্যে আপনাকে বেছে নেওয়া দরকার।