শুধুমাত্র স্ক্রিপ্টের সময়কালের জন্য পরিবেশ পরিবর্তনশীল কীভাবে সেট করবেন?


127

লিনাক্স-এ (উবুন্টু ১১.০৪) বাশ-তে, অস্থায়ীভাবে কোনও পরিবেশের পরিবর্তনশীল সেট করা সম্ভব যা স্ক্রিপ্টের সময়কালের জন্য কেবল সাধারণ ভেরিয়েবল থেকে আলাদা হবে? উদাহরণস্বরূপ, একটি শেল স্ক্রিপ্টে, এমন একটি অ্যাপ্লিকেশন তৈরি করা যা বর্তমান কার্যনির্বাহী ডিরেক্টরিতে কোনও ফোল্ডারে অস্থায়ীভাবে হোমમને সেট করে এবং তারপরে অ্যাপ্লিকেশন চালু করে হোম পোর্টেবলের কাছে সংরক্ষণ করে।


5
যদি আপনি সেটিংসটি স্ক্রিপ্টের সময়কালের বাইরে চলে যেতে চান তবে এটি আরও শক্ত হবে
নিমো

উত্তর:


119
VAR1=value1 VAR2=value2 myScript args ...

2
আমি নিজে চালানোর জন্য এটি বহুবার করেছি vblank_mode=0 glxgears। এটি কাজ করে, তবে এটি vblank_mode=0: command not foundদৌড়ানোর পরেও বলেছে , যেখানে প্রিপেন্ডিংয়ের envকারণ হয় না। [পরীক্ষা ...] দৃশ্যত zsh এটি পছন্দ করে না (এখনও এটি সঠিকভাবে ব্যবহার করে) তবে ব্যাশ এটির সাথে ভাল fine আমার ধারণা আমি envএখন থেকে পদ্ধতিটি নিয়ে যাব ।
চিনোটো ভোকরো

2
স্ক্রিপ্ট সহ এটি কাজ করে তবে কীভাবে VAR1="hello" echo $VAR1কিছুই ফেরত আসে না?
জিব্রি

2
@ জিব্রি এটি সম্প্রসারণের ঘটনাটি ঘটবে। সম্ভবত আপনি এর মতো কিছু করতে পারেন:VAR1="hello" bash -c 'echo $VAR1'
সাইবারব্র্যান্ড

এটি একাধিক পরিবেশের ভেরিয়েবলের ক্ষেত্রেও সম্ভব বলে দেখানোর জন্য আপভোটড।
বিনারাস

70
env VAR=value myScript args ...

18
বাVAR=value myScript args ...
রকাল্লাইট

9
1. PATH=$PATH:XYZ echo $PATH | grep XYZযদিও কিভাবে কোন আউটপুট নেই? ২) ব্যবহার এবং ব্যবহার না করার মধ্যে পার্থক্য কী env?
কেবডআপ

18
কারণ শেল ইকো কমান্ড কার্যকর করার আগে PATH ভেরিয়েবল প্রসারিত করে । আপনার এই সম্প্রসারণে বিলম্ব করা দরকার। একটি উপায়: PATH=$PATH:XYZ sh -c 'echo $PATH' | grep XYZ- একক উদ্ধৃতিগুলি এখানে মূল কী
গ্লেন জ্যাকম্যান

14
এটি ব্যবহার envএবং না ব্যবহারের মধ্যে পার্থক্য কী ?
মোহাম্মদ নুরাল্ডিন

এটি কোনও অনলাইনারের মতো কাজ করতে দেখা যাচ্ছে নাIFS=$'\n' for l in lines; do ... done
ড্রিভিকো

31

শুধু রাখি

export HOME=/blah/whatever

স্ক্রিপ্টের এমন পয়েন্টে যেখানে আপনি চান পরিবর্তনটি ঘটে। যেহেতু প্রতিটি প্রক্রিয়াটির নিজস্ব ভেরিয়েবলগুলির নিজস্ব সেট রয়েছে, স্ক্রিপ্টটি সমাপ্ত হলে এই সংজ্ঞাটি স্বয়ংক্রিয়ভাবে কোনও তাত্পর্য বন্ধ করে দেবে (এবং এটির সাথে পরিবর্তিত পরিবেশ রয়েছে এমন বাশের উদাহরণ)।


11
এটা বিভ্রান্তিমূলক। exportভেরিয়েবলটি সাবশেলে পাস করবে, তবে এটি প্যারেন্ট শেলকে নিয়ন্ত্রণ করে না। যদি আপনি "#! / Bin / sh" বা এর মতো শুরু হওয়া কোনও স্ক্রিপ্ট লিখছেন তবে আপনার সেট করা কোনও পরিবর্তনশীল স্ক্রিপ্টটি প্রস্থান করলে অদৃশ্য হয়ে যাবে।
উজ্জ্বলক

1
@ ব্রাইটল্যান্সার, এটি সত্য তবে আমি যা লিখেছি তা বিরোধী বলে মনে হচ্ছে না। (এই স্ক্রিপ্টটি ব্যাকগ্রাউন্ড প্রক্রিয়া শুরু করতে পারে এমন সম্ভাবনা বাদ দিয়ে তবে আমি মনে করি এটি ওপি এর পরিশীলনের স্তরের বাইরে এবং কেবল বিভ্রান্ত হবে)।
হামাখোলম

5
রফতানি অপ্রয়োজনীয়। এছাড়াও, আপনার উত্তরটি কেবল তখনই কাজ করে যদি তার স্ক্রিপ্ট কোনও দোভাষী (#! / বিন / শ বা এর মত) কে আহ্বান করে। যদি তার "স্ক্রিপ্ট" না করে থাকে, তবে আপনি যা কেবল তাকে বলেছিলেন তা তাঁর স্ক্রিপ্টের শেষের পরেও বহাল থাকবে। এ কারণেই আমি বলেছিলাম যে আপনার উত্তরটি বিভ্রান্তিমূলক ছিল - এটি সঠিক হতে পারে, এটি নাও হতে পারে তবে এটি অবশ্যই একটি অংশ পেয়েছে যা অপ্রয়োজনীয় এবং বিভ্রান্তিমূলক কারণ এটির কারণ হতে পারে যে কেউ তাকে "রফতানি" মনে করছে যে প্রয়োজনীয় উপাদানটি তিনি খুঁজছিলেন।
উজ্জ্বলক

7
@ ব্রাইটল্যান্সার: ওপি-র স্ক্রিপ্ট যদি সাব-স্ক্রিপ্টগুলি নিজেরা $ হোমের উপর নির্ভর করে থাকে তবে আমদানি করা জরুরি এবং আমি এটি অনুমান করার সাহস করি নি যে এটি ছিল না। তদ্ব্যতীত, স্ক্রিপ্টের কোনও শেবাং লাইন না থাকলেও এক্সিকিউট বিট সেট সহ কেবল একটি পাঠ্য ফাইল হলেও বাশ কোনও স্ক্রিপ্ট চালাতে একটি সাবস্কেল উত্সাহিত করবে। এটি ব্যবহার করে দেখুন - স্ক্রিপ্টে পরিবর্তনশীল অ্যাসাইনমেন্টগুলি আপনি যে শেলটি থেকে অনুরোধ করেছেন তাতে তা দৃশ্যমান নয়। এটি কেবলমাত্র যদি আপনি sourceস্ক্রিপ্টটি স্পষ্টভাবে বলেন যে এটি একই শেল দ্বারা কার্যকর করা হবে যা আপনি কমান্ড টাইপ করেছেন।
হামাখোলম 20:41

4
@ ব্রাইটল্যান্সার: রেকর্ডটি প্রয়োজনীয় যদি তিনি $HOMEস্ক্রিপ্ট থেকে সম্পাদিত কোনও আদেশ দ্বারা উত্তরাধিকার সূত্রে পেতে চান । এবং যদি সে না করে এবং সেটিংটি $HOMEকেবলমাত্র স্ক্রিপ্টের সুবিধার জন্যই হয় তবে তিনি সম্ভবত স্ক্রিপ্টটি সংশোধন করাতে আরও ভাল হবেন তাই এটি ছাড়া অন্য কিছু বোঝায় $HOME
কিথ থমসন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.