আসুন আমরা একটি নির্দিষ্ট উদাহরণ বিবেচনা করি। grepকমান্ড একটি পরিবেশ পরিবর্তনশীল নামক ব্যবহার GREP_OPTIONSডিফল্ট বিকল্পসমূহ সেট করতে।
এখন। এই ফাইলটিতে test.txtনিম্নলিখিত লাইন রয়েছে:
line one
line two
কমান্ড চালানো grep one test.txtফিরে আসবে
line one
আপনি যদি -vবিকল্পটির সাথে গ্রেপ চালনা করেন তবে এটি মিলবে না এমন লাইনগুলি ফিরিয়ে দেবে, ফলে আউটপুট হবে
line two
আমরা এখন পরিবেশগত পরিবর্তনশীল সহ বিকল্পটি সেট করার চেষ্টা করব।
exportআপনি যে কমান্ডগুলি কল করছেন তার পরিবেশ ছাড়াই সেট করা পরিবেশ পরিবর্তনশীলগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হবে না।
GREP_OPTIONS='-v'
grep one test.txt
ফলাফল:
line one
স্পষ্টতই, বিকল্পটি -vপাস হয়নি grep।
আপনি কেবল শেলটি ব্যবহারের জন্য কোনও ভেরিয়েবল সেট করার সময় আপনি এই ফর্মটি ব্যবহার করতে চান, উদাহরণস্বরূপ for i in * ; doআপনি রফতানি করতে চান না $i।
যাইহোক, ভেরিয়েবলটি সেই নির্দিষ্ট কমান্ড লাইনের পরিবেশে প্রেরণ করা হয়, সুতরাং আপনি এটি করতে পারেন
GREP_OPTIONS='-v' grep one test.txt
যা প্রত্যাশিত ফিরে আসবে
line two
আপনি এই ফর্মটি ব্যবহার করেন অস্থায়ীভাবে এই প্রোগ্রামটির আরম্ভ হওয়া বিশেষ ইভেন্টটির পরিবেশটি অস্থায়ীভাবে পরিবর্তনের জন্য।
কোনও ভেরিয়েবল রফতানি করার কারণে ভেরিয়েবলটি উত্তরাধিকার সূত্রে প্রাপ্ত হয়:
export GREP_OPTIONS='-v'
grep one test.txt
এখন ফিরে
line two
শেলটিতে পরবর্তীকালে শুরু হওয়া প্রক্রিয়াগুলির জন্য ভেরিয়েবল সেট করার এটি সর্বাধিক সাধারণ উপায়
এই সব বাশ মধ্যে করা হয়েছিল। exportএকটি বাশ অন্তর্নির্মিত; VAR=whateverবাশ সিনট্যাক্স। envঅন্যদিকে, এটি একটি প্রোগ্রাম। যখন envডাকা হয়, নিম্নলিখিত জিনিসগুলি ঘটে:
- কমান্ডটি
envএকটি নতুন প্রক্রিয়া হিসাবে কার্যকর করা হবে
env পরিবেশ পরিবর্তন করে, এবং
- আর্গুমেন্ট হিসাবে সরবরাহ করা কমান্ডকে কল করে।
envপ্রক্রিয়া দ্বারা প্রতিস্থাপিত হয় commandপ্রক্রিয়া।
উদাহরণ:
env GREP_OPTIONS='-v' grep one test.txt
এই কমান্ডটি দুটি নতুন প্রক্রিয়া চালু করবে: (i) env এবং (ii) গ্রেপ (আসলে দ্বিতীয় প্রক্রিয়াটি প্রথমটি প্রতিস্থাপন করবে)। এর দৃষ্টিকোণ থেকে grepপ্রক্রিয়া, ফলাফল ঠিক চলমান হিসাবে একই
GREP_OPTIONS='-v' grep one test.txt
তবে আপনি বাশার বাইরে থাকলে বা অন্য শেলটি চালু করতে না চাইলে আপনি এই প্রতিমাটি ব্যবহার করতে পারেন (উদাহরণস্বরূপ, আপনি যখন কলের exec()পরিবর্তে ফাংশনগুলির পরিবার ব্যবহার করছেন system())।
অতিরিক্ত নোট অন #!/usr/bin/env
এজন্য আইডিয়ামটি #!/usr/bin/env interpreterবরং ব্যবহার করা হয় #!/usr/bin/interpreter। envকোনও প্রোগ্রামের পুরো পাথের প্রয়োজন হয় না, কারণ এটি execvp()ফাংশনটি ব্যবহার করে যা PATHশেলটির মতো চলকটি অনুসন্ধান করে এবং তারপরে কমান্ড রান দ্বারা নিজেকে প্রতিস্থাপন করে। সুতরাং, কোনও দোভাষী (পারল বা পাইথনের মতো) "পথে" কোথায় বসেছেন তা সন্ধান করতে এটি ব্যবহার করা যেতে পারে।
এর অর্থ হ'ল বর্তমান পথটি সংশোধন করে আপনি প্রভাব ফেলতে পারেন কোন পাইথন রূপটি ডাকা হবে। এটি নিম্নলিখিতগুলি সম্ভব করে তোলে:
echo -e '#!/usr/bin/bash\n\necho I am an evil interpreter!' > python
chmod a+x ./python
export PATH=.
calibre
পরিবর্তে ক্যালিবার আরম্ভের ফলাফল হবে
I am an evil interpreter!
export key=valueপ্রসারিত বাক্য গঠন এবং বহনযোগ্য স্ক্রিপ্টগুলিতে (যেমন#! /bin/sh) ব্যবহার করা উচিত নয় ।