আশেপাশের শেল স্ক্রিপ্ট স্টিকটিতে আমি কীভাবে পরিবেশের পরিবর্তনগুলি "রফতানি" করতে পারি?


54

আমার একাধিক অ্যামাজন ইসি 2 অ্যাকাউন্ট রয়েছে এবং দ্রুত $EC2_HOMEস্ক্রিপ্ট ব্যবহার করে ভেরিয়েবলগুলি স্যুইচ করতে সক্ষম হতে চাই ।

আমার কাছে এটির মতো একটি শেল স্ক্রিপ্ট সেট আপ করা আছে:

#!/bin/sh
export EC2_HOME=/home/me/.ec2
echo $EC2_HOME

আমি যখন স্ক্রিপ্টটি চালাব তখন আমি জানি যে EC2_HOMEএটি সেট করা আছে তবে আমি ভেবেছিলাম যে exportব্যবহারটি স্ক্রিপ্টটি শেষ হওয়ার পরে ভেরিয়েবল স্টিকটি প্রায় তৈরি করবে। এটি চলবে না, কারণ দৌড়াদৌড়ি echo $EC_HOMEকিছুই দেখায় না।

আমি জানি এটি অবশ্যই খুব প্রাথমিক লিনাক্স স্ক্রিপ্টিং জ্ঞান হতে পারে তবে আমি এটি জানি না। আমি ভাগ্য ছাড়াই সম্পর্কিত প্রশ্নগুলির সন্ধান করার চেষ্টা করেছি - সুতরাং এটি যদি নকল হয় তবে আমার ক্ষমা চাই।

উত্তর:


60

আপনার স্ক্রিপ্টটি উত্স করা উচিত with

. ./script

অথবা

source ./script

19
কারণটি হ'ল আপনার স্ক্রিপ্টটি বর্তমান শেলের শিশু হিসাবে একটি নতুন শেল প্রক্রিয়া তৈরি করেছে। শিশু প্রক্রিয়াতে আপনার যে কোনও পরিবেশ পরিবর্তনগুলি পিতামাতাকে প্রভাবিত করতে পারে না। আপনি যখন ব্যবহার করেন .বা source, আপনি কোনও নতুন শিশু প্রক্রিয়া তৈরি করছেন না, আপনি বর্তমান শেলটিতে কমান্ডগুলি চালাচ্ছেন।
গ্লেন জ্যাকম্যান 27'12

1
@glennjackman আমারও অনুরূপ সমস্যা আছে এবং আমি আপনার সমাধানটি চেষ্টা করেছি তবে যখনই .বা করি তখন তা শেল থেকে আমাকে সরিয়ে দেয় source। ইহা কি জন্য ঘটিতেছে ?
প্যাট্রিক

7
@ প্যাট্রিক: আপনার স্ক্রিপ্টের একটি exitবিবৃতি থাকতে পারে, সুতরাং এটি উত্সাহিত করা উপযুক্ত নয়।
enzotib

source ./scriptপুরোপুরি সূক্ষ্ম কাজ করার সময় , sudo source ./script.shবলেন sudo: source: command not found। আমি sudo ব্যবহার করে এটি কীভাবে করতে পারি?
71GA

1
@ 71GA: সংকলন পছন্দসইগুলির sudoউপর নির্ভর করে এবং কনফিগারেশন সেটিংসের উপর নির্ভর করে /etc/sudoersআপনি যখন কমান্ডগুলি চালাচ্ছেন তখন আপনার পরিবেশ সংরক্ষণ করতে পারবেন বা করতে পারবেন না sudo। আমি আপনাকে পরামর্শ দিচ্ছি আপনি আপনার স্ক্রিপ্ট উৎস, এবং তারপর চালানোর চেষ্টা sudoসঙ্গে -Eপরিবেশ সংরক্ষণে বিকল্প। যদি এটি কাজ না করে তবে আমি মনে করি আপনি খুব কম কাজ করতে পারেন।
এনজোটিব

35

আপনি যখন কোনও স্ক্রিপ্ট রান করেন তখন এটির নিজস্ব শেল এবং নিজস্ব পরিবেশ আসে যা স্ক্রিপ্টটি শেষ হওয়ার সাথে সাথে আবার অদৃশ্য হয়ে যায়। চারদিকে পরিবেশের পরিবর্তনশীল রাখতে, আপনার বর্তমান শেলটিতে স্ক্রিপ্টটি উত্স করুন:

$ source ./a.sh

বা সমতুল্যভাবে (তবে কিছুটা বহনযোগ্য) POSIX ডট কমান্ডটি ব্যবহার করুন :

$ . ./a.sh

তারপরে সংজ্ঞাগুলি আপনার বর্তমান শেলের পরিবেশে রাখা হবে এবং এটি থেকে যে কোনও প্রোগ্রাম আপনি চালু করবেন তা উত্তরাধিকার সূত্রে প্রাপ্ত হবে।

একটি স্ক্রিপ্ট চালানোর কাছাকাছি হতে, পরিবেশ পরিবর্তনশীল . a.shডিরেক্টরিগুলি অনুসন্ধান করে a.sh পাবেন PATH


এসব কিভাবে আচরণ মধ্যে কিছু সুক্ষ্ণ বিষয়গুলো আছে, এবং কিনা .এবং source(এ সব বা বর্তমান) একই। . ./a.shপ্রতিটি পসিক্স-সামঞ্জস্যপূর্ণ শেলগুলিতে অবশ্যই একইরকম আচরণ করবে, কিন্তু sourceএবং ., . a.shএবং . ./a.sh, বিভিন্ন হতে পারে। বাশের জন্য sourceএবং. সব ক্ষেত্রে একই ; zshsource জন্য সর্বদা বর্তমান ডিরেক্টরিটি সর্বদা পরীক্ষা করে ; ksh মূলত একই রকম।

স্ক্রিপ্টের নামটি যদি একটি পথ হিসাবে দেওয়া হয় (ক /) থাকে তবে সেই পথটি সর্বক্ষেত্রে সরাসরি ব্যবহৃত হয়। সবচেয়ে বহনযোগ্য নির্ভরযোগ্য জিনিসটি হ'ল . ./scriptবা . /path/to/script


1

শুধু রেকর্ডের জন্য।

আপনি যদি ইন্টারনেট থেকে চালনা স্ক্রিপ্ট চান যা সিস্টেমে env রফতানি করে

আপনি নিম্নলিখিত ফর্ম্যাট ব্যবহার করতে পারেন

source <(curl -s -L https://raw.githubusercontent.com/iamwwc/wwcdocker/master/install.sh)

উদাহরণ স্বরূপ:

source <(curl -s -L https://example.com/install.sh)

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