এটি অগত্যা ভাল না।
এর সুবিধাটি #!/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)।