পরিবেশের পরিবর্তনশীল আসলে কী?


42

আমি জানি যে VARIABLE=valueপরিবেশের পরিবর্তনশীল export VARIABLE=valueতৈরি করে এবং এটি বর্তমান শেল দ্বারা তৈরি প্রসেসের জন্য উপলব্ধ করে। envবর্তমান পরিবেশের পরিবর্তনশীলগুলি দেখায় তবে তারা কোথায় থাকে? পরিবেশের পরিবর্তনশীল (বা কোনও পরিবেশ , সেই বিষয়ে) কীসের সমন্বয়ে গঠিত ?

উত্তর:


29

পরিবেশ যেমন মনে হয় ততটা যাদুকরী নয়। শেল এটি মেমরির মধ্যে সঞ্চয় করে এবং execve()সিস্টেম কলে যায়। শিশু প্রক্রিয়াটি এটি হিসাবে পরিচিত হিসাবে অ্যারে পয়েন্টার হিসাবে উত্তরাধিকার সূত্রে প্রাপ্ত environexecveম্যানপেজ থেকে :

সংক্ষিপ্তসার

   #include <unistd.h>

   int execve(const char *filename, char *const argv[],
              char *const envp[]);

argvনতুন প্রোগ্রামে আর্গুমেন্ট স্ট্রিংগুলির একটি অ্যারে।
কনভেনশন অনুসারে, এই স্ট্রিংগুলির প্রথমটিতে ফাইলটি সম্পাদন করা হওয়ার সাথে যুক্ত ফাইলের নাম থাকতে হবে। envpস্ট্রিংগুলির একটি অ্যারে, প্রচলিতভাবে ফর্ম কী = মানের, যা নতুন প্রোগ্রামে পরিবেশ হিসাবে প্রেরণ করা হয় of

environ(7)র manpage কিছু অন্তর্দৃষ্টি উপলব্ধ করা হয়:

সংক্ষিপ্তসার

   extern char **environ;

বর্ণনা

ভেরিয়েবল environপয়েন্টারগুলির একটি বিন্যাসে স্ট্রিংগুলিকে "পরিবেশ" বলে উল্লেখ করে points এই অ্যারেতে শেষ পয়েন্টারের মান রয়েছে NULL। (এই পরিবর্তনশীলটি অবশ্যই ব্যবহারকারী প্রোগ্রামে ঘোষিত হতে হবে, তবে <unistd.h>শিরোলেখ ফাইলগুলিতে ঘোষণা করা হয়েছে যদি শিরোনামের ফাইলগুলি libc4 বা libc5 থেকে আসে এবং যদি তারা গ্লিবসি থেকে আসে এবং _ জিএনইউএসএসসিআরই সংজ্ঞায়িত হয়।) স্ট্রিংগুলির এই অ্যারেটি উপলব্ধ করা হয় এক্সিকিউটিউট (3) কল দ্বারা প্রক্রিয়া প্রক্রিয়া শুরু হয়েছিল।

এই দুটি জিএনইউ ম্যানেজই পসিক্স স্পেসিফিকেশনের সাথে মেলে


4
+1 এটি সম্ভবত লক্ষনীয় যে exec(3)পরিবারের কিছু সদস্য (যেমনগুলি এক্সিকিউটিভ * ভিয়ের সাথে মেলে না) ** পরিবেশের নীচে পরিবেশ পাস করে।
এমএসডাব্লু

5
মনে রাখবেন যে এটি শিশু প্রক্রিয়াগুলি সম্পর্কে নয় (শিশু প্রক্রিয়াগুলি তাদের পিতামাতার সমস্ত স্মৃতির উত্তরাধিকারী হয়), তবে সম্পাদিত প্রোগ্রামগুলি (একই প্রক্রিয়াতে), সুতরাং এটি একটি এক্সিকিউড () সিস্টেম কল জুড়ে ডেটা পাস করার অন্য উপায় (যা অন্যথায় স্মৃতি মুছে দেয়) প্রক্রিয়া)।
স্টাফেন চেজেলাস

@ এমএসডব্লিউ: এটি exec*eবৈকল্পিক যা environগ্লোবাল ভেরিয়েবলটি সুস্পষ্টভাবে ব্যবহার করার পরিবর্তে স্পষ্টতই একটি এনভিকে পাস করে । v"ভেক্টর" এর অর্থ এবং কমান্ড লাইন আর্গুমেন্টগুলিকে অ্যারের হিসাবে পাস করা বোঝায় (পরিবর্তে "তালিকা" (ভেরিয়েবল-দৈর্ঘ্যের ফাংশন)) execveএটি একটি সিস্টেম কল, এবং অন্যান্য সমস্ত exec*ফাংশনগুলির জন্য এটি লিবিসি মোড়ক are
পিটার কর্ডেস

19

আপনি এটি কিছুটা ভুল পেয়েছেন: SOME_NAME=valueএকটি শেল ভেরিয়েবল তৈরি করে (বেশিরভাগ শাঁসে)। export SOME_NAME=valueপরিবেশের পরিবর্তনশীল তৈরি করে। খারাপের জন্য আরও উন্নতির জন্য, বেশিরভাগ ইউনিক্স / লিনাক্স / * বিএসডি শেলগুলি এনভায়রনমেন্ট ভেরিয়েবল এবং শেল ভেরিয়েবল অ্যাক্সেস করতে অভিন্ন সিনট্যাক্স ব্যবহার করে।

কিছু বৃহত্তর অর্থে, একটি "পরিবেশ" হ'ল তথ্য যা প্রোগ্রামের প্রয়োগের সাথে সাথে চলে। সি প্রোগ্রাম, আপনি একটি প্রক্রিয়া আইডি পেতে পারে getpid()কল, একটি শেল প্রোগ্রামে আপনি যদি একটি পরিবর্তনশীল এক্সেস ব্যবহার করবেন: $$। প্রক্রিয়া আইডি প্রোগ্রামের পরিবেশের কেবল একটি অংশ। আমি বিশ্বাস করি "এনভায়রনমেন্ট" শব্দটি মডেলিং প্রোগ্রাম এক্সিকিউশন এর মতো আরও কিছু তাত্ত্বিক কম্পিউটার বিজ্ঞানের বিষয় থেকে এসেছে .. প্রোগ্রাম এক্সিকিউশন এর মডেলগুলির একটি পরিবেশ থাকে "এতে ভেরিয়েবল এবং তাদের মানগুলির মধ্যে সংযোগ থাকে"।

এবং এই আধুনিক, শক্তিশালী সংজ্ঞা হ'ল ইউনিক্স / লিনাক্স / * বিএসডি শেলগুলির জন্য "পরিবেশ" কী: নাম ("ভেরিয়েবল") এবং তাদের মানগুলির মধ্যে একটি সমিতি। বেশিরভাগ ইউনিক্স-শৈলীর শাঁসের জন্য মানগুলি সমস্ত চরিত্রের স্ট্রিং, যদিও এটি আগে যতটা সত্য তা সত্য নয়। Ksh, Zsh এবং বাশ সকলেই এই দিনগুলিতে ভেরিয়েবল টাইপ করেছেন। এমনকি শেল ফাংশন সংজ্ঞাগুলিও রফতানি করা যায়।

প্লেইন শেল ভেরিয়েবলের থেকে পৃথক পরিবেশের ব্যবহারের ক্ষেত্রে fork/execসমস্ত ইউনিক্স ব্যবহার করে এমন একটি নতুন প্রক্রিয়া শুরু করার পদ্ধতি জড়িত । যখন আপনি exportএকটি নাম / মান জুটি, সেই নাম / মান যুগলটি নতুন এক্সিকিউটেবলের পরিবেশে উপস্থিত হবে, শেল দ্বারা execve(2)সিস্টেম কল দিয়ে শুরু করা (সাধারণত শেল কমান্ড ব্যবহার করা fork(2)বাদে একটি অনুসরণ execকরা)।

একটি অনুসরণ করে execve(), main()নতুন বাইনারি ফাংশনটির কমান্ড লাইন আর্গুমেন্ট, পরিবেশ ( var=valueস্ট্রিংগুলিতে পয়েন্টারগুলির একটি NULL- টার্মিনেটেড অ্যারে হিসাবে সঞ্চিত থাকে , environ(7)ম্যান পৃষ্ঠাটি দেখুন)। উত্তরাধিকার সূত্রে প্রাপ্ত অন্য রাষ্ট্রের মধ্যে রয়েছে ulimitসেটিংস, বর্তমান কার্যনির্বাহী ডিরেক্টরি এবং execve()কলারের জন্য এফডি_সিএলওএএসইসি সেট নেই এমন কোনও উন্মুক্ত ফাইল বর্ণনাকারী includes টিটিটির বর্তমান অবস্থা (প্রতিধ্বনিত সক্ষম, কাঁচা মোড, ইত্যাদি) সদ্য execসম্পাদনা প্রক্রিয়া অনুসারে উত্তরাধিকার সূত্রে প্রাপ্ত মৃত্যুদণ্ডের অঙ্গ হিসাবে বিবেচনা করা যেতে পারে ।

সাধারণ কমান্ডের (বিল্টিন বা শেল ফাংশন ব্যতীত) সম্পাদনের পরিবেশbash সম্পর্কে ম্যানুয়ালের বিবরণ দেখুন ।

কমপক্ষে অন্যান্য কয়েকটি অপারেটিং সিস্টেমের তুলনায় ইউনিক্স পরিবেশটি পৃথক: ভিএমএস "লেক্সিক্যালস" কোনও শিশু প্রক্রিয়া দ্বারা পরিবর্তিত হতে পারে এবং সেই পরিবর্তনটি পিতামাতার মধ্যে দৃশ্যমান ছিল। cdএকটি শিশু প্রক্রিয়াতে একটি ভিএমএস পিতামাতার কাজের ডিরেক্টরিকে প্রভাবিত করে। কমপক্ষে কিছু পরিস্থিতিতে এবং আমার স্মৃতি আমার ব্যর্থ হতে পারে।

কিছু এনভায়রনমেন্ট ভেরিয়েবল সুপরিচিত, $HOME, $PATH, $LD_LIBRARY_PATHএবং অন্যদের। কিছু একটি প্রদত্ত প্রোগ্রামিং সিস্টেমে প্রচলিত, তাই যে বাবা-মা শেল, কিছু প্রোগ্রাম প্রচুর এবং বিশেষ উদ্দেশ্য তথ্য প্রচুর পাস করতে পারেন একটি নির্দিষ্ট অস্থায়ী ডাইরেক্টরি, অথবা একটি ইউজার আইডি এবং পাসওয়ার্ড যে দেখা না মত ps -ef। সাধারণ সিজিআই প্রোগ্রামগুলি পরিবেশগত ভেরিয়েবলের মাধ্যমে ওয়েব সার্ভার থেকে প্রচুর তথ্যের অধিকারী হয়।


1
এটি আরও কিছুটা জটিল বলে মনে হচ্ছে। কমপক্ষে কমপক্ষে SOME_NAME=value commandSOME_NAME এনভায়রনমেন্ট ভেরিয়েবলটি সেই আদেশ আদেশের জন্য সেট করবে। বিভ্রান্তিকরভাবে, এটি একই নামের শেল ভেরিয়েবল সেট করে বলে মনে হচ্ছে না।
স্যামুয়েল এডউইন ওয়ার্ড

2
আরও সুনির্দিষ্টভাবে বলতে গেলে, পরিবেশের ভেরিয়েবলগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না বরং এটি শেল থেকে স্পষ্টভাবে প্রোগ্রামগুলিতে প্রেরণ করা হয়।
এমএসডাব্লু

2
@ সামুয়েলএডউইন ওয়ার্ড যে কারণে SOME_NAME=value commandআপনার প্রত্যাশার বিপরীতে আচরণ করে তা হ'ল এটি একটি বিশেষ বাক্য গঠন যা "আদেশটি পরিবেশে SOME_NAME যুক্ত করুন তবে অন্যথায় এই শেলের ভেরিয়েবলগুলি পরিবর্তন করবেন না"।
এমএসডাব্লু

1
আকর্ষণীয়, ল্যাম্বদা ক্যালকুলাস / ফাংশনাল প্রোগ্রামিংয়ের লিঙ্ক। এটি একটি আকর্ষণীয় সংযোগ যা অনেক অর্থবোধ করে।
ম্যাট

1
এর কিছু একদম ঠিক নেই। উদাহরণস্বরূপ, subshells subprocesses এবং করা আবশ্যক fork()ed, কিন্তু তারা কি (কপি) শেল ভেরিয়েবল পাবেন।
রুখ

7

তাদের কাঁচা ফর্মের পরিবেশগত ভেরিয়েবলগুলি কেবল নাম / মান জোড়ার একটি সেট। man 1 bashপরিবেশ বিভাগের অধীনে ব্যাশ ম্যান পৃষ্ঠাতে ( ) বর্ণিত :

   When  a  program  is invoked it is given an array of strings called the
   environment.   This  is  a  list  of  name-value  pairs,  of  the  form
   name=value.

   The  shell  provides  several  ways  to manipulate the environment.  On
   invocation, the shell scans its own environment and creates a parameter
   for  each name found, automatically marking it for export to child pro-
   cesses.  Executed commands inherit the  environment.

ব্যবহারিক ভাষায়, এটি আপনাকে এমন শৈলীর সংজ্ঞা দিতে দেয় যা বর্তমান শেল থেকে ডাকা প্রোগ্রামগুলির সাথে ভাগ করা বা অনন্য। উদাহরণস্বরূপ, ব্যবহার করার সময় crontabবা visudoআপনি যখন EDITORপরিবেশের পরিবর্তনশীলকে আপনার সিস্টেমের ডিফল্টরূপে ব্যবহার করবেন তবে তার পরিবর্তে অন্য কোনও সম্পাদককে সংজ্ঞায়িত করতে পারেন। manকমান্ডের মতো জিনিসগুলির ক্ষেত্রেও এটি ঠিক রাখা যেতে পারে যা PAGERম্যান পেজের আউটপুট প্রদর্শন করতে পেজার প্রোগ্রামটি কী ব্যবহার করা উচিত তা আপনার পরিবেশের দিকে নজর দেয়।

বেশিরভাগ ইউনিক্স কমান্ড পরিবেশটি পড়ে এবং সেখানে যা সেট করা হয় তার উপর নির্ভর করে তাদের আউটপুট / প্রসেসিং / ক্রিয়াকে এইগুলির উপর নির্ভর করে পরিবর্তন করে। কিছু ভাগ করা হয়, কিছু প্রোগ্রাম অনন্য। বেশিরভাগ ম্যান পেজগুলিতে বর্ণিত প্রোগ্রামটিতে পরিবেশের পরিবর্তনশীলের কীভাবে প্রভাব রয়েছে তার তথ্য রয়েছে।

অন্যান্য ব্যবহারিক চিত্রগুলি একই প্ল্যাটফর্মে ওরাকলের কয়েকটি ইনস্টল থাকা সিস্টেমগুলির মতো জিনিসগুলির জন্য। সেট করে ORACLE_HOME, ওরাকল কমান্ডের পুরো স্যুটটি (যেমন আপনার PATHপরিবেশ পরিবর্তনশীল থেকে লোড হয়েছে ) তারপরে সেই শীর্ষ স্তরের ডিরেক্টরিতে সেটিংস, সংজ্ঞা, ম্যাপিং এবং লাইব্রেরিগুলি টানুন। অন্যান্য প্রোগ্রাম যেমন জাভা এর JAVA_HOMEপরিবেশ পরিবর্তনশীল সহ এটি একই হোল্ড ।

ব্যাশ নিজেই অনেক এনভায়রনমেন্ট ভেরিয়েবল যা ইতিহাস (থেকে কিছু একটি সীমার আচরণ পরিবর্তন করতে পারেন HISTSIZE, HISTFILEইত্যাদি), পর্দা আকার ( COLUMNS), ট্যাব সমাপ্তির ( FIGNORE, GLOBIGNORE) লোকেল এবং চরিত্র এনকোডিং / ডিকোডিং ( LANG, LC_*), প্রম্পট ( PS1.. PS4), এবং সুতরাং এগিয়ে (আবার বাশ ম্যান পৃষ্ঠা থেকে জ্ঞান সন্ধান করুন)।

এছাড়াও আপনি এমন স্ক্রিপ্ট / প্রোগ্রাম লিখতে পারেন যা আপনার নিজস্ব কাস্টম এনভায়রনমেন্ট ভেরিয়েবল (সেটিংস পাস করার জন্য, বা কার্যকারিতা পরিবর্তন করতে) ব্যবহার করে।


0

"এনভায়রনমেন্ট ভেরিয়েবলস" গতিশীল নামযুক্ত মানগুলির একটি সেট যা কম্পিউটারে চলমান প্রক্রিয়াগুলি যেভাবে আচরণ করবে তা প্রভাবিত করতে পারে।

এগুলি অপারেটিং পরিবেশের অংশ যেখানে একটি প্রক্রিয়া চালিত হয়। উদাহরণস্বরূপ, একটি চলমান প্রক্রিয়া অস্থায়ী ফাইলগুলি সংরক্ষণের জন্য উপযুক্ত অবস্থান আবিষ্কার করার জন্য TEMP এনভায়রনমেন্ট ভেরিয়েবলের মান জিজ্ঞাসা করতে পারে, বা প্রসেসটি চালাচ্ছে ব্যবহারকারীর মালিকানাধীন ডিরেক্টরি কাঠামোটি অনুসন্ধান করতে হোম বা ইউএসপি্রফিল ভেরিয়েবল।

আরো এখানে তথ্য → http://en.wikipedia.org/wiki/Environment_variable

এনভায়রনমেন্ট ভেরিয়েবল সম্পর্কে আপনি যা জানতে চান তা ... ↑


1
যদিও এই লিঙ্কগুলি চলে যাওয়ার সম্ভাবনা নেই, তবে এখানে প্রাসঙ্গিক পাঠ্যের সাথে উত্তর দেওয়া এবং ব্যাকআপের তথ্যের সংযোজন হিসাবে লিঙ্কটি সরবরাহ করা ভাল।
অ্যান্টন

@ অ্যান্থন আমি বিশ্বাস করি যে আপনি সঠিক আছেন এবং আমি যত তাড়াতাড়ি সম্ভব পরিবর্তনগুলি করব ... পরামর্শের জন্য ধন্যবাদ ...
SoCalDiegoRob

-1

এই উত্তরের জন্য কিছু শেল স্ক্রিপ্টিং অভিজ্ঞতা এবং জ্ঞান প্রয়োজন ভেরিয়েবল, মান, পরিবর্তনশীল বিকল্প, প্রম্পট, প্রতিধ্বনি, কার্নেল, শেল, ইউটিলিটি, সেশন এবং প্রক্রিয়া সহ।

একটি এনভায়রনমেন্ট ভেরিয়েবল (envar) গ্লোবাল সংজ্ঞায়িত ভেরিয়েবল যে ভাবে একটি প্রদত্ত প্রক্রিয়া একটি কম্পিউটারের অপারেটিং সিস্টেমে আচরণ করবে প্রভাবিত করতে পারেন এমন একটি সেট।

1. একটি অনুকরণীয় ভূমিকা:

আমরা এনভের্সকে একটি $এবং মূলধনযুক্ত অক্ষর দিয়ে প্রতিস্থাপন করি । উদাহরণস্বরূপ: $PS1

আমরা এইভাবে একটি এনভর প্রিন্ট করতে পারি:

echo $PS1

$PS1ইউনিক্স প্রম্পটের মান ধারণ করে। বলুন এর স্থানীয় মান হয় \u \w $

  • \u (বর্তমান) ব্যবহারকারী,
  • \w ওয়ার্কিং ডিরেক্টরি বোঝায়,
  • $ প্রম্পট সীমানা হয়।

সুতরাং, যদি আমরা একটি করুন: echo $PS1আমরা মান দেখতে \u, \wপ্লাস শেষ ডলার সাইন ইন করুন।

আমরা যদি সেই এনভেরের মানগুলি পরিবর্তন করি তবে আমরা সেই প্রসঙ্গে ইউনিক্সের আচরণটি পরিবর্তন করতে পারি। উদাহরণ স্বরূপ:

PS1="\w >"

এখন প্রম্পটটি দেখতে এরকম দেখাচ্ছে (ধরে নিই যে কাজের ডিরেক্টরিটির নাম দেওয়া হয়েছে "জন"):

John >

আমরা একইভাবে করতে পারি PS1="Hello, I'm your prompt >", তাই echo $PS1এনে দেবে:

Hello, I'm your prompt >

বাশ ৪.০ এক্সএক্সে, আমরা envকমান্ডের সাহায্যে সিস্টেমে সমস্ত এনভর প্রিন্ট করতে পারি । আমি envটার্মিনালটিতে নির্বাহ করার পরামর্শ দিচ্ছি এবং আউটপুটটি কিছুটা দেখুন।

২. এই ডেটাগুলি কীভাবে দেখানো এবং হেরফের করা হয়:

একটি অধিবেশন টার্মিনাল আসুন আসুন envars যে বাশ সঙ্গে আসছে কাস্টমাইজ করতে।

পূর্বোক্ত পরিবর্তনগুলি সাধারণত অস্থায়ী এবং এখানে কেন:

প্রতিটি অধিবেশন (যা একটি উপ-অধিবেশন নয়) অনন্য এবং একাধিক প্রক্রিয়া একই সময়ে (প্রতিটি নিজস্ব এনভর্সের সেট সহ) অনন্যভাবে চলতে পারে তবে সাধারণত সেশন 0 থেকে অধিবেশন 1 এবং তারপরের দিকে উত্তরাধিকার থাকে।

আমরা একটি প্রক্রিয়াতে যে পরিবর্তন করি তা এটির জন্য অনন্য এবং যদি আমরা এগুলি কোনও উপায়ে সংরক্ষণ না করে বন্ধ করি তবে তা বন্ধ হয়ে যাবে।

সুতরাং আমরা কীভাবে এই পরিবর্তনগুলি সংরক্ষণ করতে পারি:

এনভর পরিবর্তনগুলি সংরক্ষণ করার জন্য বিভিন্ন ধরণের উপায় রয়েছে যা আমরা বেছে নেওয়ার সুযোগের উপর নির্ভর করে। এই জাতীয় পরিবর্তনের জন্য এখানে বিভিন্ন স্কোপ (স্তর) রয়েছে:

  • প্রক্রিয়া স্তর: এনভরগুলি কেবলমাত্র বর্তমান সেশনে প্রোগ্রামগুলির জন্য উপলব্ধ।
  • রফতানির স্তর: এনভরগুলি বর্তমান সেশনে বা তার সমস্ত উপ-সেশনে প্রোগ্রামগুলির জন্য উপলব্ধ ।
  • গ্লোবাল স্তর: পরিবর্তনগুলি সমস্ত সেশনের জন্য (প্রাথমিক এবং সমস্ত সাবস) সংরক্ষণ করা হবে।

এনভর ডেটা কোথায় সংরক্ষণ করা হয়:

ইউনিক্স 3 টি প্রধান স্তর দ্বারা নির্মিত: কার্নেল, শেল এবং ইউটিলিটিস। প্রতিটি শেলের নিজস্ব এনভর রয়েছে এবং এগুলি শেলটিতে প্রাথমিক বা একচেটিয়াভাবে নির্মিত হয়।

বিশ্বব্যাপী এগুলিকে পরিবর্তন করতে হবে সেই নির্দিষ্ট অবস্থানটি সাধারণত /etc/profileযদিও আমরা .bashrcঅবশ্যই এটি করতে পারি ।

৩. নতুন এনভর তৈরি করা:

আমরা নতুন এনভর তৈরি করতে পারি এবং এখানে একটি উপায়; বাশ ৪.৪ xxx এর নাম অনুসারে কোনও নেটিভ এনভার নেই MESSAGE(যেমন বলা হয়েছে, এনভাররা সাধারণত বড়হীন হয়)।

MESSAGE="Hello world!"

এটি আমাদের জন্য তৈরি করবে এবং এখন যদি আমরা প্রতিধ্বনি টাইপ করি তবে $MESSAGEআমরা পাই hello world!

যদি আমরা bashআমাদের বর্তমান কার্য অধিবেশন (উইন্ডো) এ কার্যকর করি, আমরা একটি নতুন বাশ সাব-সেশন শুরু করব এবং আমরা কার্যকর না করে মূল প্রক্রিয়াটিতে আর কাজ করব না exit

দ্রষ্টব্য: টার্মিনাল এমুলেটর (যেমন উবুন্টু ডেস্কটপ) সহ অপারেটিং সিস্টেমগুলিতে, একটি উপ-অধিবেশন সাধারণত একই উইন্ডোতে চলতে থাকে, তবে অন্য উইন্ডোতে একটি নতুন অধিবেশনটি বর্তমানের উপ-অধিবেশন নয় (এটি একটি সংলগ্ন প্রক্রিয়া) ।

দ্রষ্টব্য: এনভর মানগুলিতে বিশেষ লক্ষণ ব্যবহার করবেন না! বা তারা সংরক্ষণ করা হবে না।

মূল সেশন থেকে সমস্ত উপ-অধিবেশনে এনভর রফতানি করা হচ্ছে:

আমরা এখনও প্রথম সেশনে তৈরি এনভরটিকে ব্যবহারকারীর বা বৈশ্বিক স্তরের কনফ ফাইলগুলিতে নিবন্ধভুক্ত না করে দ্বিতীয় সেশনে ব্যবহার করতে পারি (নিম্নলিখিত ডেটা দেখুন)। এটি কীভাবে করা যায় তা এখানে:

আসল সেশনে যান (বর্তমান উইন্ডো বা অন্য কোনওটি হোক) এবং সম্পাদন করুন:

export MESSAGE

রফতানি করার সময়, একটি $চিহ্ন ব্যবহার করবেন না ।

এটি এখন সমস্ত উপ-সেশনে রফতানি করা হয়। আপনি যদি echo $MESSAGEকোনও উপ-অধিবেশনটি করেন, তবে তা আপনার ব্যবহারকারীর বা অন্য কোনও, এটি মুদ্রিত হবে।

মনে রাখবেন যে শেলের অভ্যন্তরীণ ভেরিয়েবলগুলি যেমন PS1রফতানি করা উচিত নয়, তবে আপনি যদি কোনও কারণেই সেগুলি রপ্তানি করতে চান এবং সেগুলি উপস্থিত না bashহয় export, তবে পরে কার্যকর করবেন না bash –norc

৪ $ পাঠ এনভায়ার:

$PATH ব্যবহারকারীরা সাধারণত সর্বাধিক পরিবর্তন করবে এমন এনভর।

যদি আমরা echo $PATH, আমরা এই স্ট্রিমটি দেখতে যাচ্ছি:

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

এই এনভেরের মুদ্রিত মানগুলি এখানে কলোন দ্বারা পৃথক করা হয়েছে (:) তবে এখানে সম্ভাব্যতর আরামদায়ক উপায় রয়েছে (এগুলি একই মান):

/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games

এগুলি অনুসন্ধানের জন্য নির্দেশিকা, যখন আমরা কোনও ইউটিলিটি চালাই।

নির্বাহের মাধ্যমে which echoআমরা এর ফাইলের অবস্থানটি পেয়ে যাব - উদাহরণস্বরূপ, আমরা দেখতে পাব এটি এতে বিদ্যমান /bin/echo

এর ভিত্তিতে এভনার এর মানগুলি দেখতে আমাদের ইকো এনভার টাইপ করতে হবে না। আমরা এটিও করতে পারি:

/bin/echo $ENVAR

Envar এখনও কার্যকর করা হবে, উদাহরণস্বরূপ:

/bin/echo $HOME

আমাদের দেয়

/home/User || /root

এই রকম:

echo $HOME

আমাদের দেয়

/home/User || /root

নোট: $HOMEযেমন সংক্ষিপ্ত করা হয় ~

সিস্টেম- AT PATH সম্পর্ক এবং একটি সম্ভাব্য ব্যবহারকারীর মিথস্ক্রিয়া:

বাশ ৪.৪ এক্সএক্স-এ, যখন আমরা কোনও ইউটিলিটিটিকে তার সম্পূর্ণ পথ ছাড়াই ব্যবহার করি, সিস্টেমটি $PATHএনভরের উপরোক্ত বর্ণিত সমস্ত 6 টি মান ব্যবহার করবে । সুতরাং, এটি থেকে শুরু /user/local/binহবে এবং echoএক্সিকিউটেবলের জন্য এটির সমস্ত সামগ্রী অনুসরণ করবে ।

/bin/echoএক্ষেত্রে এটি থামবে , যার ক্ষেত্রে এই ক্ষেত্রে এক্সিকিউটেবল থাকতে পারে।

সুতরাং, $PATHএনভরকে অনুকূলিতকরণের মূল কারণ হ'ল এক্সিকিউটেবলগুলি ইনস্টল করা যা তার কোনও মূল মানের অধীন নয়।

এই জাতীয় নির্বাহযোগ্য ইনস্টল করার পরে, আমাদের $PATHসেই অনুযায়ী তাদের মান নির্ধারণ করা উচিত এবং তারপরে আমরা তাদের সাথে কাজ করতে সক্ষম হব।

5. পরিশিষ্ট - প্রসারিত $PATH:

আমরা export $PATHউপ-সেশনগুলিকে বাশ করতে পারি (এতে ওয়ার্ডপ্রেসের জন্য ডাব্লুপি-সিএমআই বা দ্রুপালের জন্য ড্রাশের মতো ব্যাশ এক্সটেনশন রয়েছে):

export PATH="/home/John:$PATH"

এটি একটি নতুন মান যোগ হবে /home/Johnথেকে $PATH, এবং তারপর ডান পরে, এটা কোনো নেটিভ মান এটি, যা সিনট্যাক্স অধীনে সংরক্ষণ করা হয় (ডান কোলন পরে) অ্যানেক্স হবে $PATH

এ জাতীয় স্থায়ী পরিবর্তন সাধারণত স্ক্রিপ্টে করা যেতে পারে, সাধারণত /etc/profileনামের অধীনে এবং নামে .bashrc


3
এই উত্তরের সাথে একটি ভয়াবহ ভুল রয়েছে: সেশন এবং প্রক্রিয়াগুলির সংমিশ্রণ, !পরিবেশের পরিবর্তনশীল মান সম্পর্কে কাজ করার বিষয়ে সতর্কতা যা এটি দেখানো উদাহরণের ঠিক নীচে, উপ-অধিবেশনগুলির একটি ভ্রান্ত ধারণা, কী করা উচিত সম্পর্কে বেশ উদ্ভট উপদেশ শেল ভেরিয়েবল রফতানি করার পরে এবং বিশ্বব্যাপী পরিবেশের ভেরিয়েবলগুলির একটি মিথ্যা ধারণা।
জেডিবিপি

warning about ! in an environment variable value not working that is right below an example showing it working? উদাহরণস্বরূপ।
জনডোইয়া

quite bizarre advice about what to do after exporting a shell variable, আপনি ঠিক কি বোঝাতে চেয়েছেন?
জনডোইয়া

false notion of global environment variables, আপনি ঠিক কি বোঝাতে চেয়েছেন?
জনডোইয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.