পরিবেশ স্ক্রীনগুলি কাজ করছে না তা নির্ধারণের জন্য BASH স্ক্রিপ্ট


136

যখন প্রয়োজন হবে তখন কিছু পরিবেশের ভেরিয়েবল সেট করতে আমি নীচের স্ক্রিপ্টটি লিখেছি।

#!/bin/sh
export BASE=/home/develop/trees
echo $BASE
export PATH=$PATH:$BASE
echo $PATH

কমান্ডের নীচে এবং ফলাফলগুলি আমি আমার টার্মিনালে দেখতে পাচ্ছি: স্ক্রিপ্টটি চলতে থাকে তবে ভেরিয়েবলগুলি শেষে সেট করা থাকে না।

~$: ./script.sh
/home/develop/trees
/bin:......:/home/develop/trees
~$: echo $BASE

~$: 

কোনো সমস্যা? আগাম ধন্যবাদ. Mirko

উত্তর:


192

exportexportকমান্ডটি চালানো শেলের চাইল্ড প্রসেসগুলিতে পরিবর্তনশীল অ্যাসাইনমেন্ট রফতানি করে । আপনার কমান্ড-লাইন পরিবেশটি স্ক্রিপ্টের শেলের পিতামাতা , সুতরাং এটি ভেরিয়েবল অ্যাসাইনমেন্টটি দেখতে পাবে না।

আপনি বর্তমান শেল পরিবেশে স্ক্রিপ্ট কমান্ডগুলি কার্যকর করতে .(বা source) বাশ কমান্ডটি ব্যবহার করতে পারেন এবং যা চান তা অর্জন করতে পারেন, যেমন achieve

source ./script.sh
echo "$BASE"

উত্পাদন করবে

/home/develop/trees

sourceকমান্ড প্রায়ই স্ক্রিপ্ট দেখা জন্য একটি ব্যাশ সমার্থক হয় ., যা POSIX মান অংশ (তাই .উদাহরণস্বরূপ, ড্যাশ পাওয়া যায়, কিন্তু sourceনয়)।

. ./script.sh     # identical to "source ./script.sh"

( . script.shএবং source script.shপ্রথম দেখবে script.shমধ্যে PATH, তাই এটি পাথ উল্লেখ করার নিরাপদ script.sh।)


29
exportআপনাকে সাব-শেলগুলিতে ভেরিয়েবলগুলি পাস করার দরকার নেই , একটি সাবশেল আপনার বর্তমান শেলের একটি অনুলিপি, ভেরিয়েবল এবং ফাংশন ইত্যাদিসহ রফতানি ভেরিয়েবলগুলি শেল থেকে উদ্ভূত নতুন প্রক্রিয়াগুলিতে অনুলিপি হয়ে যায়, সেই প্রক্রিয়াটি অন্য শেল হ'ল বা না করেই। দ্বিতীয়ত, .সোর্সিংয়ের জন্য পসিক্স কমান্ড। বাশ এর sourceজন্য আরও পঠনযোগ্য প্রতিশব্দ হিসাবে যুক্ত করে তবে আপনি এটি sh এ উপলব্ধ থাকায় নির্ভর করতে পারবেন না। শেষ পর্যন্ত . ./scriptপরিবর্তে . scriptযদি আপনি চমক এড়াতে চান। mywiki.wooledge.org/BashFAQ/060
গিরিহা

মনে রাখবেন যে আপনি যদি কোনও স্ক্রিপ্ট উত্পন্ন করেন এবং পাইপ ব্যবহার করেন তবে উত্স প্রাপ্ত পরিবেশ পিতামাতার জন্য উপলব্ধ নয়। যেমন 'সোর্স সেটিট.শ' ঠিক আছে। 'উত্স setit.sh | টি setit.log' ঠিক আছে না। বিস্ময়কর. স্বজ্ঞাত নয়।
গেওথে

10

আপনি যখন কোনও স্ক্রিপ্ট রান করেন, এটি একটি সাব-শেইলে চলে। চলকগুলি কেবল সেই সাব-শেলের প্রসঙ্গেই বৈধ। তাদেরকে আপনার সেট .bashrcবা .profileএবং এর পর্যন্ত পড়েছেন ভেরিয়েবল এবং subshellsexportবিবৃতি hierachy (বর্তমান শেল এবং সব এর subshells) আপনার উদাহরণ হিসাবে না উপর নিচ কাজ করে।

বিকল্পভাবে (আপনি যদি সত্যই স্ক্রিপ্টটি আপনার বর্তমান শেলের পরিবেশকে প্রভাবিত করতে চান) এটি চালান:

. ./script.sh

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


5

আমি প্রায়শই ঝামেলা ছাড়াই পরিবেশের পরিবর্তনশীল সেট করতে চাই।

এই সুবিধাটি বাস্তবায়নের জন্য আমি আমার .bashrc এ যা যুক্ত করছি তা এখানে।

defect() {
    if [ $1 ] && [ -z $2 ]
    then
        eval 'export DEFECT=$1'
        return 0
    else
        echo 'Usage: defect {number}'
        return 1
    fi
}

-1

আপনি এরকম কিছু চেষ্টা করতে পারেন

CURRENT_DIR=`pwd`
echo "SOME_PATH is pointing to ${CURRENT_DIR}"
#Export SOME_PATH for current working directory
export SOME_PATH=${CURRENT_DIR}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.