আমি একটি নির্দিষ্ট মান জন্য চালানোর ENV_VAR=value command
জন্য চালাতে পারেন । কি আনসেট সমতূল্য জন্য ?command
ENV_VAR
ENV_VAR
command
cmd
জন্য ব্যবহার করি।
আমি একটি নির্দিষ্ট মান জন্য চালানোর ENV_VAR=value command
জন্য চালাতে পারেন । কি আনসেট সমতূল্য জন্য ?command
ENV_VAR
ENV_VAR
command
cmd
জন্য ব্যবহার করি।
উত্তর:
-i
বিকল্পটি ছাড়াও , যা পুরো পরিবেশটি মুছে দেয়, পসিক্স env
একটি ভেরিয়েবল আনসেট করার কোনও উপায় সরবরাহ করে না।
তবে কয়েকটি env
বাস্তবায়ন (অন্তত জিএনইউ, busybox
'এবং ফ্রিবিএসডি এর অন্তর্ভুক্ত) সহ, আপনি এটি করতে পারেন:
env -u ENV_VAR command
যা ENV_VAR
পরিবেশ থেকে পরিবর্তনশীল প্রতিটি ঘটনাকে সরিয়ে ফেলতে কাজ করবে (দ্রষ্টব্য যে এটি পরিবেশের ভেরিয়েবলের জন্য খালি নাম দিয়ে কাজ করে না ( env -u ''
এটি একটি ত্রুটি দেয় বা বাস্তবায়নের উপর নির্ভর করে অকার্যকর হয় যদিও সমস্ত স্বীকার করে env '=value'
, সম্ভবত একটি সীমাবদ্ধতা unsetenv()
সি ফাংশন দ্বারা ব্যয় হয়েছে যা পসিক্সকে খালি স্ট্রিংয়ের জন্য একটি ত্রুটি ফিরিয়ে নিতে হবে, যদিও এর জন্য এরকম কোনও সীমাবদ্ধতা নেই putenv()
))।
বহনযোগ্যভাবে (POSIX শেলগুলিতে), আপনি এটি করতে পারেন:
(unset -v ENV_VAR; exec command)
(দ্রষ্টব্য যে কয়েকটি শাঁস ব্যবহার করে, exec
যা command
চালিত হয় তা পরিবর্তন করতে পারে : উদাহরণস্বরূপ কোনও ফাংশন বা বিল্টিনের পরিবর্তে ফাইল সিস্টেমে একটি চালায় (এবং alias
স্পষ্টতই সম্প্রসারণকে বাইপাস করে দেবে ) env
উপরের মতো You আপনি এই ক্ষেত্রে বাদ দিতে চান) ।
তবে এটি পরিবেশের ভেরিয়েবলগুলির পক্ষে কাজ করবে না যার একটি নাম রয়েছে যা শেল ভেরিয়েবলের জন্য ম্যাপযোগ্য নয় (লক্ষ্য করুন যে কয়েকটি শেল পছন্দসইভাবে mksh
পরিবেশের থেকে সেই পরিবর্তনশীলগুলিকে প্রারম্ভকালে ছাঁটাবে) বা ভেরিয়েবলগুলি কেবল পঠনযোগ্য হিসাবে চিহ্নিত হয়েছে।
-v
বোর্ন শেলটির জন্য এবং bash
যার নাম unset
ছাড়া কোনও ভেরিয়েবল-v
না থাকলে যার ছাড়া কোনও ENV_VAR
ফাংশনটি আনসেট করতে পারে । অপশনটি পাস না করা হলে বেশিরভাগ অন্যান্য শেলগুলি ফাংশনগুলি আনসেট করে না । (অনুশীলনে কোনও পার্থক্য করার সম্ভাবনা নেই)।-f
(এছাড়াও বাগ / misfeature হুঁশিয়ার bash
/ mksh
/ yash
যার unset
অধীন কিছু পরিস্থিতিতে পরিবর্তনশীল আনসেট না, কিন্তু একটি বাইরের সুযোগ পরিবর্তনশীল প্রকাশ )
যদি perl
উপলব্ধ থাকে তবে আপনি এটি করতে পারেন:
perl -e 'delete $ENV{shift@ARGV}; exec @ARGV or die$!' ENV_VAR command
যা খালি নাম সহ পরিবেশের পরিবর্তনশীলগুলির জন্যও কাজ করবে।
এখন আপনি যদি কোনও বিল্টিন বা ফাংশনের জন্য পরিবেশের পরিবর্তনশীল পরিবর্তন করতে চান এবং সেগুলি সাবসেলের মধ্যে চালানো না চান তবে এগুলি সমস্তই কাজ করবে না bash
:
env -u LANG printf -v var %.3f 1.2 # would run /usr/bin/printf instead
(unset -v LANG; printf -v var %.3f 1.2) # changes to $var lost afterwards
(এখানে .
দশমিক বিভাজক হিসাবে ব্যবহার করা এবং বোঝার বিষয়টি নিশ্চিত করার পথে একটি বিভ্রান্তিক দৃষ্টিভঙ্গি হিসাবে ল্যাংকে আনসেট করা LC_ALL=C printf...
that এর জন্য ব্যবহার করা ভাল be
কিছু শেল দিয়ে, আপনি পরিবর্তে একটি ফাংশন ব্যবহার করে ভেরিয়েবলের জন্য স্থানীয় সুযোগ তৈরি করতে পারেন:
without() {
local "$1" # $1 variable declared as initially unset in bash¹
shift
"$@"
}
without LANG printf -v var %.3f 1.2
এর সাথে zsh
, আপনি একটি বেনামী ফাংশনও ব্যবহার করতে পারেন:
(){local ENV_VAR; command}
এই পদ্ধতির কিছু শেলগুলিতে (অলকুইস্ট শেলের উপর ভিত্তি করে) কাজ করবে না, যাদের local
ভেরিয়েবলটি প্রাথমিকভাবে আনসেট হিসাবে ঘোষণা করবেন না (তবে মান এবং বৈশিষ্ট্যের উত্তরাধিকারী)। সেই ক্ষেত্রে, আপনি কি করতে পারেন local ENV_VAR; unset ENV_VAR
, কিন্তু যে না না mksh
বা yash
( typeset
পরিবর্তে local
এটি কাজ না would হিসাবে যে এক জন্য) unset
শুধুমাত্র বাতিল করা হবে local
।
¹ এছাড়াও সাবধান যে bash
, স্থানীয় ENV_VAR
(আনসেট না হওয়া সত্ত্বেও) রফতানির বৈশিষ্ট্য ধরে রাখতে পারে । সুতরাং যদি command
একটি ফাংশন যা একটি মান ENV_VAR
নির্ধারিত হয় , ভেরিয়েবল কমান্ডের পরিবেশে পরে বলা হবে। unset ENV_VAR
যে বৈশিষ্ট্য পরিষ্কার হবে। অথবা আপনি এটি ব্যবহার করতে পারেন local +x ENV_VAR
যা একটি পরিষ্কার স্লেটও নিশ্চিত করে (যদি না যে পরিবর্তনশীল কেবল পঠনযোগ্য হিসাবে ঘোষণা না করা হয় তবে তারপরে এটি করার মতো কিছুই নেই bash
)।
env '=foo' python -c 'import os; print os.environ[""]'
। আমি আশা করি না যে অনেক লোক এর মতো একটি ভেরিয়েবল সেট করতে চান।
আমি যতদূর সচেতন সেখানে সরাসরি সমতুল্য কোনও কিছুই নেই; আপনি একটি সাব-শেল ব্যবহার করতে পারেন:
(unset ENV_VAR; exec command)
(unset ENV_VAR; exec somecommand)
আপনি যদি দক্ষতায় আসলটির সমতুল্য হতে চান (সাবসেল গ্রাস করে)। এটি যেমন রয়েছে, এটি একটি অতিরিক্ত কাঁটাচামচ যুক্ত করে।
command
শেষ আদেশ।
env -u
।
তুমি ব্যবহার করতে পার ENV_VAR= command
এটি আসলে ভেরিয়েবলটি আনসেট করে না, তবে এটি বেশিরভাগ ক্ষেত্রে কার্যকর হতে পারে (শেল স্ক্রিপ্টগুলি সাধারণত test -n
ভেরিয়েবল সেট করা আছে কিনা তা পরীক্ষা করতে ব্যবহার করে):
$ export ENV_VAR=foo
$ mycommand
ENV_VAR: foo
$ ENV_VAR=bar mycommand
ENV_VAR: bar
$ ENV_VAR= mycommand
ENV_VAR:
command
যেহেতু সেখানে আসলে প্লেসহোল্ডার একজন দুর্ভাগা পছন্দ হয় একটি বিল্ট-ইন নামের কমান্ড।mycommand
বাsomecommand
বা এই ধরনের পেতে একটি উন্নততর অভ্যাস হতে পারে।