এনভি, সেটেনভ, রফতানি এবং কখন ব্যবহার করতে হবে তার মধ্যে পার্থক্য কী?


18

সম্প্রতি আমি লক্ষ্য করেছি যে আমাদের কাছে পরিবেশের ভেরিয়েবলগুলি সেট করার 3 টি বিকল্প রয়েছে:

  1. export envVar1=1
  2. setenv envVar2=2
  3. env envVAr3=3

যদি অন্য কোনও উপায় থাকে তবে দয়া করে আমাদের আলোকিত করুন।

আমি কখন অন্যের চেয়ে বেশি পছন্দ করব? গাইডলাইন পরামর্শ করুন।

শেল সামঞ্জস্যের জন্য, সবচেয়ে বিস্তৃত কোনটি (আরও শেল ডায়ালিকগুলি কভার করে)?

আমি ইতিমধ্যে এই উত্তরটি লক্ষ্য করেছি তবে আমি প্রশ্ন envএবং ব্যবহারের পছন্দ নির্দেশিকা সহ প্রশ্নটি প্রসারিত করতে চাই ।

উত্তর:


15

export VARIABLE_NAME='some value'কোনো POSIX-অনুবর্তী শেল (পরিবেশ পরিবর্তনশীল সেট করতে উপায় sh, dash, bash, ksh, ইত্যাদি .; এছাড়াও zsh)। যদি ভেরিয়েবলের ইতিমধ্যে একটি মান থাকে তবে আপনি export VARIABLE_NAMEএর মান পরিবর্তন না করে এটিকে পরিবেশ পরিবর্তনশীল করতে ব্যবহার করতে পারেন ।

প্রাক-পসিক্স বোর্ন শেলগুলি এটি সমর্থন করে না, এজন্য আপনি স্ক্রিপ্টগুলি এড়িয়ে যাবেন export VARIABLE_NAME='some value'এবং VARIABLE_NAME='some value'; export VARIABLE_NAMEপরিবর্তে ব্যবহার করবেন । তবে প্রাক-পসিক্স বোর্ন শেলগুলি আজকাল অত্যন্ত বিরল।

setenv VARIABLE_NAME='some value'এনভায়রনমেন্ট ভেরিয়েবল সেট করতে csh সিনট্যাক্স। setenvশি-তে বিদ্যমান নেই এবং সিএসএস স্ক্রিপ্টগুলিতে খুব কমই ব্যবহৃত হয় এবং গত ২০ বছর ধরে ইন্টারেক্টিভ ব্যবহারের জন্য ব্যাশ দ্বারা ছাড়িয়ে গেছে (এবং আরও বেশি সময়ের জন্য zsh), সুতরাং আপনি এটির মুখোমুখি না হলে আপনি এটিকে ভুলে যেতে পারেন।

envকমান্ড ছাড়া খুব কমই দরকারী কুঁড়েঘর লাইন । যখন তর্ক ছাড়াই আহ্বান করা হয়, এটি পরিবেশটি প্রদর্শন করে, তবে exportএটি আরও ভাল করে (সাজানো এবং প্রায়শই পৃথক মানগুলির সাথে নিউলাইনগুলি থেকে নিউলাইনগুলিকে বিচ্ছিন্ন করতে উদ্ধৃত করা হয়)। যখন আর্গুমেন্ট সহ প্রার্থনা, এটা অতিরিক্ত এনভায়রনমেন্ট ভেরিয়েবল সঙ্গে কমান্ড চালায়, কিন্তু ছাড়া একই কমান্ড envএছাড়াও (কাজ করে VAR=value mycommandরান mycommandদিয়ে VARসেট value, ঠিক env VAR=value mycommand)। envশেবাং লাইনে কারণটি কার্যকর কারণ হ'ল এটি অনুসন্ধান করে PATHএবং কমান্ডের নামের সাথে অনুরোধ করার পরে এটি অন্য কিছু না করে। envআদেশের সঙ্গে মাত্র কয়েক এনভায়রনমেন্ট ভেরিয়েবল সঙ্গে কমান্ড চালানোর জন্য উপযোগী হতে পারে-i, বা শেলটি আমদানি করে না এমন অবৈধ নাম সহ ভেরিয়েবল সহ পরিবেশ প্রদর্শন করার জন্য প্যারামিটার ছাড়াই।


3

VAR='asdf'পাতার পরিবেশ যেমন অবিচলিত যেমন ভেরিয়েবল সেট করা মানে যে একই প্রোগ্রামে আপনি যে প্রোগ্রামগুলি চালু করেন সেগুলি সম্পর্কে কিছুই জানবে না VARএবং এটি অ্যাক্সেস করতে অক্ষম হবে। শেল স্ক্রিপ্টগুলি লেখার সময় আপনি এই আচরণটি চান।

exportঅন্যদিকে, একটি বাশ বিল্টিন যা পরিবেশকে পরিবর্তন করে এইভাবে বর্তমান অধিবেশনে উত্পন্ন শিশু প্রসেসের জন্য রফতানি পরিবর্তনশীল দৃশ্যমান হয়। দৌড় দিয়ে আপনি এটি অর্জন করতে পারেন VAR='asdf' %program_name%

envএকটি বিল্টিন নয়, নিজে থেকেই একটি প্রোগ্রাম। পৃষ্ঠে এটি যখন আপনি ঠিক ঠিক তেমন কাজ VAR='asdf' %program_name%করে তবে নিম্ন স্তরের জিনিসগুলি কিছুটা জটিল হয়ে যায়। প্রথমত, envচালু হয়। এটি পরিবেশ পরিবর্তন করে, পরে প্রদত্ত যুক্তি দিয়ে কমান্ডটি কার্যকর করে। একই আচরণ যা আপনি এক্সিকিউটিভ (3) সিস্টেম কল ব্যবহার করে নিজের কোডে অর্জন করতে পারেন ।

setenvexportআপনার উত্তরে বলা হয়েছে, কেবল সিএস-ফ্যামিলি শেলগুলিতে।


2
আধুনিক শেলগুলিতে, VAR=asdfপরিবেশটি VARইতিমধ্যে যদি পরিবেশে থাকত তবে আপডেট করুন । (এটি মূল বোর্ন শেলটিতে সত্য ছিল না))
গিলস'স-অশুভ হওয়া বন্ধ করুন '

2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.