পরিবেশ পরিবর্তনশীল বাশ স্ক্রিপ্টে অ্যাক্সেসযোগ্য নয়


22

আমি এক অদ্ভুত সমস্যায় পড়ে গেলাম। আমি কিছু এনভির ভেরিয়েবল এতে রেখেছি .bashrcএবং এটি যেমনটি করা উচিত তেমন কাজ করে:

echo $HADOOP_HOME
/home/me/dist/hadoop

বাশ স্ক্রিপ্টগুলি কার্যকর করার সময় এনভির ভেরিয়েবল অ্যাক্সেসযোগ্য নয়। ধরুন আমি /tmp/sample.shনীচের সামগ্রী দিয়ে তৈরি করেছি :

#! /bin/bash
echo $HADOOP_HOME

আমি যখন স্ক্রিপ্টের উপরে চলে যাই তখন একটি ফাঁকা লাইন প্রতিধ্বনিত করে:

/tmp/sample.sh
   

1
আপনি কি আপনার প্রাসঙ্গিক অংশটি দেখাতে পারেন .bashrc? আমার অনুমান আপনি হয় তা পাচ্ছেন না exporting: export HADOOP_HOME=/home/me/dist/hadoopযখন আপনি চালাতে /tmpsample.sh` (যা spawns একটি নতুন bashএকটি নতুন পরিবেশের সঙ্গে) HADOOP_HOME নতুন পরিবেশে নেই।
জন এন

উত্তর:


29

কারণ HADOOP_HOMEভেরিয়েবলটি রফতানি হয়নি:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

আপনি যখন শেল স্ক্রিপ্টটি চালান, সেই স্ক্রিপ্টটি তার নিজস্ব বাশ ইনস্ট্যান্সে চলবে (এটিই #!/bin/bashঘটে) যা বর্তমানের একটি শিশু শেল। চলকগুলি ডিফল্টরূপে শিশু শেলগুলিতে প্রেরণ করা হয় না, কেবল যদি সেগুলি রফতানি করা হয়। প্রতিটি বাশ সেশনকে স্বাধীন হিসাবে ভাবেন (তারা মূলত হ'ল)। অন্যের পরিবেশকে দূষিত করার জন্য আপনি সাধারণত একটিতে সংজ্ঞাযুক্ত ভেরিয়েবলগুলি চান না। যে ক্ষেত্রে যেখানে এটি প্রয়োজনীয়, ব্যবহার করুন export

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