উত্তর:
প্রতিবার বিন্দু টাইপ না করে এটি করার কোনও উপায় আছে কি? উদাহরণস্বরূপ স্ক্রিপ্ট থেকে প্যারেন্ট শেলের পরিবর্তনের জন্য একটি আদেশ?
আমি মনে করি না (টাইপিং বাদে source somescript.sh, তবে সম্ভবত আপনি যা খুঁজছেন তা নয়)।
আপনি যদি স্ক্রিপ্টটি যথারীতি চালনা করেন ./somescript.shতবে শেলটি এই আদেশটি কাঁটাচামচ করে এবং প্রয়োগ করে। এটি কমান্ডটি কার্নেলের কাছে প্রেরণ করে এবং তারপরে কার্নেল সিদ্ধান্ত নিয়েছে #!যে স্ক্রিপ্টের মধ্যে লাইনটি বিশ্লেষণ করে এই কমান্ডটি কীভাবে কার্যকর করা হবে । এর পরে কার্নেলটি নির্দিষ্ট দোভাষী (এই ক্ষেত্রে সম্ভবত একটি bashসাবশেল) চালু করে। এর জন্য পরিবর্তনের somescript.shজন্য তার পরিবেশটি প্যারেন্ট শেলকে প্রভাবিত না করে সাবহেলে বিচ্ছিন্ন করা হয়।
আপনি যদি শেলটি অন্য কোনও প্রক্রিয়া আরম্ভ না করে নিজেই স্ক্রিপ্টটি পড়তে চান তবে আপনাকে স্পষ্টভাবে এটি .বা sourceকীওয়ার্ড ব্যবহার করে বলতে হবে ।
aliasকমান্ডটি দিয়ে সাবস্কেল তৈরি না করা , যেমন স্কট প্রস্তাবিত।
আপনি যদি ./somescript.shকোনও বাহ্যিক প্রোগ্রাম হিসাবে চালনা করেন তবে এটি চলমান শেল প্রক্রিয়ার অভ্যন্তরে কিছুই করতে পারে না, যেমন অ-রফতানি ভেরিয়েবল অ্যাক্সেস করা, ভেরিয়েবলগুলি সেট করা, বর্তমান ডিরেক্টরি পরিবর্তন করা ইত্যাদি around এর আশেপাশের কোনও উপায় নেই।
(ঠিক আছে, ঠিক আছে, আপনি সাব-প্রসেস থেকে একটি ডিবাগার চালাতে সক্ষম হতে পারেন এবং পিতামাতার প্রক্রিয়াটির স্মৃতিটিকে সামঞ্জস্য করতে পারেন But তবে আপনি যদি এটি চেষ্টা করেন তবে সর্বাধিক সম্ভাব্য ফলাফলটি প্যারেন্ট শেলটি ক্র্যাশ করছে))
আপনি চালাতে প্রয়োজন . ./somescript.sh। আপনি যদি এটি পছন্দ করেন তবে এটি একটি উপনামের পিছনে বা ফাংশনটি লুকিয়ে রাখতে পারেন, তবে আবার উপন্যাস বা ফাংশন সংজ্ঞাটি প্যারেন্ট শেলের মধ্যে করতে হবে।
আমি মনে করি আপনি যে স্ক্রিপ্টটি চালানোর চেষ্টা করছেন তা কার্যকরযোগ্য নয়। chmod a+x somescript.shসেই ফাইলটিতে ব্যবহারকারী, গোষ্ঠী এবং অন্যান্য (ইউগো) জন্য এক্সিকিউট বিট যুক্ত করবে। ফাইলের প্রথম লাইনেও প্রয়োজন হবে #! শীর্ষে লাইন, মত #!/bin/bash।
ls -l somescript.shফাইলের জন্য আপনাকে rwx ট্রিপল্টগুলি পড়ুন (পড়ুন / লিখুন / সম্পাদন করুন) আপনার নিজেরাই এই ফাইলটির মালিকানা ধরে নিয়ে কমপক্ষে প্রথম সেটটিতে একটি এক্স দরকার হবে।
export PATH=$PATH:/usr/local/binচাইলে আপনার $ PATH- তে / usr / স্থানীয় / বিন যুক্ত করতে চান, তবে আপনার চলমান পরিবেশের ভেরিয়েবলগুলি পরিবর্তন করতে আপনার ফাইলটি উত্সের প্রয়োজন। এই প্রশ্নটি সত্যিই "বাশ স্ক্রিপ্ট থেকে আমার চলমান শেলের মধ্যে আমি কীভাবে আমার পরিবেশের পরিবর্তনগুলি পরিবর্তন করব?" স্ক্রিপ্টটি . ./somescript.shঠিকঠাক কার্যকর করছে - আপনি কোনও ফাইলে উত্স হিসাবে ডট কমান্ড ব্যবহার করছেন। tcsh একই জিনিসটির জন্য "উত্স" ব্যবহার করে।
export PATH=$PATH:.
শেলটিতে সেই কমান্ডটি চালনা করা বা এটি আপনার শেল কনফিগারেশন ফাইলটিতে যুক্ত করা বর্তমান ডিরেক্টরিটি PATH ভেরিয়েবলের সাথে যুক্ত হবে। PATH ভেরিয়েবল হল ডিরেক্টরিগুলির একটি তালিকা যেখানে আপনার কমান্ড দেওয়ার সময় আপনার শেল বাইনারিগুলি কার্যকর করতে দেখবে।
এটি আপনাকে ছাড়াই বর্তমান ডিরেক্টরিতে কোনও এক্সিকিউটেবল চালানোর অনুমতি দেবে ./
.নয় ./যা ফাইলনামের অংশ নয় of .Somescript চালানো এটি বর্তমান শেল-তে চালায় . ./somescriptনা।