যাক আমি প্রার্থনা করি 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
সাথে চালায় ।foo
argv[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
।