যাক আমি প্রার্থনা করি A=B commandএবং env A=B commandভিতরে প্রবেশ করি bash। উভয় আহ্বানের মধ্যে পার্থক্য থাকতে পারে এমন কোনও পরিস্থিতি কি আছে?
যাক আমি প্রার্থনা করি A=B commandএবং env A=B commandভিতরে প্রবেশ করি bash। উভয় আহ্বানের মধ্যে পার্থক্য থাকতে পারে এমন কোনও পরিস্থিতি কি আছে?
উত্তর:
তারা একই উদ্দেশ্যে পরিবেশন করে (প্রদত্ত এনভ বারগুলি কমান্ডে পাস করুন)। তবে কয়েকটি উল্লেখযোগ্য পার্থক্য:
A=B command
হ'ল শেল (বোর্ন / পসিক্স / আরসি) কনস্ট্রাক্ট।
উদাহরণস্বরূপ, আপনি এটি করতে পারেন:
A=B find . -exec cmd '{}' +
বা:
find . -exec env A=B cmd '{}' +
তবে আপনি পারবেন না:
find . -exec A=B cmd '{}' +
কারণ findএই কমান্ডটি চালানোর জন্য কোনও শেলকে ডাকে না।
অন্যদিকে, envবাহ্যিক আদেশ হওয়ায় আপনি এটি করতে পারবেন না:
f() { ...; }
env A=B f
বা:
env A=B eval '...'
এছাড়াও:
A=B cmd
বৈধ শেল ভেরিয়েবলের নামগুলি কেবল এনভ ভার্সের সাথে কাজ করে । আপনার envঅন্য কোনও এনভির বর্ণের প্রয়োজন :
env 'my var=foo' cmd...
bash_পরিবর্তনশীল পুনরায় সেট করুন :
bash-4.3$ _=xxx env | grep '^_='
_=/usr/bin/env
bash-4.3$ env _=xxx env | grep '^_='
_=xxx
ইন zsh, ARGV0এবং STTYযে প্রেক্ষাপটে বিশেষ অর্থ আছে:
STTY=-echo cat
রান catটার্মিনাল সঙ্গে echoঅক্ষম। এবং:
ARGV0=foo cmd
এটির cmdসাথে চালায় ।fooargv[0]
আপনি যদি এই বিশেষ প্রক্রিয়াকরণটি না চান তবে আপনাকে ব্যবহার করতে হবে env।
নোট যা sudoসমর্থন করে:
sudo A=B cmd
এটি শেলটি বা এটি envকরার জন্য ব্যবহার করছে না। এটি নিজে থেকে এটি করে।
এটি যে নামের সাথে শুরু হয় তা বাদ দিয়ে যেকোনো নামের সাথে ভেরিয়েবলগুলি পাস করতে পারে -।
অ্যাসাইনমেন্টটি একটি শেল কনস্ট্রাক্ট যেখানে যুক্তির সমান চিহ্নটি শেলের envকোনও বিশেষ অর্থ রাখে না তাই A=$B cmdনিরাপদ যেখানে env A="$B" cmd(বা sudo A="$B" cmd) ডাবল উদ্ধৃতি প্রয়োজন।
A=B cmdসিনট্যাক্সটি কেবল বোর্ন এবং rcপরিবারের শেলগুলিতে সমর্থিত ( esযদিও নেই)। উদাহরণস্বরূপ cshবা fishপরিবারগুলির শেলগুলিতে আপনাকে অবলম্বন করতে হবে env।