এটি অগত্যা ভাল না।
এর সুবিধাটি #!/usr/bin/env python
হ'ল এটি python
ব্যবহারকারীর মধ্যে প্রথম কার্যকর হওয়া যা ব্যবহার করবে তা ব্যবহার করবে $PATH
।
অসুবিধা এর #!/usr/bin/env python
এটি ব্যবহার করা হবে যাই হোক না কেন হয় python
এক্সিকিউটেবল ব্যবহারকারীর প্রথম প্রদর্শিত হবে $PATH
।
এর অর্থ হ'ল স্ক্রিপ্টটি কে চালায় তার উপর নির্ভর করে আলাদা আচরণ করতে পারে। একটি ব্যবহারকারীর জন্য, এটি /usr/bin/python
ওএসের সাথে ইনস্টল হওয়াটি ব্যবহার করতে পারে । অন্যের জন্য, এটি এমন একটি পরীক্ষামূলক ব্যবহার করতে পারে /home/phred/bin/python
যা পুরোপুরি সঠিকভাবে কাজ করে না।
যদি python
শুধুমাত্র ইনস্টল করা /usr/local/bin
, যে ব্যবহারকারী নেই /usr/local/bin
মধ্যে $PATH
এমনকি স্ক্রিপ্ট চালাতে পারবেন হবে না। (এটি সম্ভবত আধুনিক সিস্টেমে খুব বেশি সম্ভাবনাযুক্ত নয়, তবে এটি আরও বেশি অস্পষ্ট দোভাষীর পক্ষে সহজেই ঘটতে পারে))
নির্দিষ্ট সিস্টেমে#!/usr/bin/python
স্ক্রিপ্টটি চালানোর জন্য কোন দোভাষী ব্যবহার করা হবে তা নির্দিষ্ট করে আপনি নির্দিষ্ট করে ।
আর একটি সম্ভাব্য সমস্যা হ'ল #!/usr/bin/env
কৌশলটি আপনাকে ইন্টিপ্লেটারে যুক্তি দেয় না (স্ক্রিপ্টের নাম বাদে , যা স্পষ্টভাবে পাস করা হয়)। এটি সাধারণত কোনও সমস্যা নয়, তবে তা হতে পারে। অনেক পার্ল স্ক্রিপ্টগুলি দিয়ে লেখা হয় #!/usr/bin/perl -w
তবে use warnings;
এটি সুপারিশ করা প্রতিস্থাপন হ'ল দিনগুলিতে। Csh স্ক্রিপ্টগুলি ব্যবহার করা উচিত #!/bin/csh -f
- তবে csh স্ক্রিপ্টগুলি প্রথম স্থানে সুপারিশ করা হয় না । তবে এর অন্যান্য উদাহরণও থাকতে পারে।
আমি যখন একটি নতুন সিস্টেমে অ্যাকাউন্ট সেট আপ করি তখন একটি ব্যক্তিগত উত্স নিয়ন্ত্রণ সিস্টেমে আমার কাছে প্রচুর পার্ল স্ক্রিপ্ট রয়েছে। আমি একটি ইনস্টলার স্ক্রিপ্ট ব্যবহার করি যা #!
প্রতিটি স্ক্রিপ্টের লাইনটি আমার মধ্যে ইনস্টল করার সাথে সাথে এটি পরিবর্তন করে $HOME/bin
। (আমাকে #!/usr/bin/perl
ইদানীং ব্যতীত অন্য কিছু ব্যবহার করতে হয় নি ; এটি বারবার ফিরে যায় যখন পার্ল প্রায়শই ডিফল্টরূপে ইনস্টল করা হত না))
একটি ছোট্ট বিন্দু: #!/usr/bin/env
কৌশলটি তাত্ক্ষণিকভাবে env
কমান্ডটির অপব্যবহার , যা মূলত পরিবর্তিত পরিবেশের সাথে একটি আদেশ সঞ্চার করার উদ্দেশ্যে (নামটি ইঙ্গিত করা হয়েছিল)। তদুপরি, কিছু পুরানো সিস্টেমে (সুনোস 4 সহ, যদি আমি সঠিকভাবে স্মরণ করি) এর মধ্যে env
কমান্ডটি নেই /usr/bin
। এগুলির কোনওটিরই উল্লেখযোগ্য উদ্বেগ হওয়ার সম্ভাবনা নেই। env
এইভাবে কাজ করে, প্রচুর স্ক্রিপ্টগুলি #!/usr/bin/env
কৌশলটি ব্যবহার করে এবং ওএস সরবরাহকারীরা এটিকে ভেঙে ফেলার জন্য কিছু করতে পারে না। এটা তোলে পারে কোনো সমস্যা হবে যদি আপনি আপনার স্ক্রিপ্ট সত্যিই একটি পুরাতন সিস্টেমে চালাতে চান, তখন কিন্তু আপনি এটিকে যেকোনোভাবে পরিবর্তন করতে প্রয়োজন সেসময়।
আরেকটি সম্ভাব্য সমস্যা, (সোপালাজো ডি অ্যারিরেজকে ধন্যবাদ মন্তব্যগুলিতে উল্লেখ করার জন্য) যে ক্রোন জবস একটি সীমাবদ্ধ পরিবেশ নিয়ে চলে। বিশেষত, $PATH
সাধারণত কিছু /usr/bin:/bin
। সুতরাং যদি অনুবাদক ধারণকারী ডিরেক্টরিটি যদি সেই ডিরেক্টরিগুলির মধ্যে একটিতে না ঘটে, এমনকি এটি $PATH
যদি কোনও ব্যবহারকারীর শেলের মধ্যে আপনার ডিফল্ট থাকে , তবে /usr/bin/env
কৌশলটি কাজ করবে না। আপনি সঠিক পথটি নির্দিষ্ট করতে পারেন, বা সেট করতে আপনার ক্রন্টবটিতে একটি লাইন যুক্ত করতে পারেন $PATH
( বিশদর জন্য man 5 crontab
)।