পরিবেশের ভেরিয়েবলগুলি সেট করতে আমার নীচের পুনরাবৃত্ত ফাংশন রয়েছে:
function par_set {
PAR=$1
VAL=$2
if [ "" != "$1" ]
then
export ${PAR}=${VAL}
echo ${PAR}=${VAL}
shift
shift
par_set $*
fi
}
যদি আমি নিজেই এটি কল করি তবে এটি উভয়ই ভেরিয়েবল সেট করে এবং স্ট্যাডআউটের প্রতিধ্বনি দেয়:
$ par_set FN WORKS
FN=WORKS
$ echo "FN = "$FN
FN = WORKS
Stdout একটি ফাইলে পুনঃনির্দেশও কাজ করে:
$ par_set REDIR WORKS > out
cat out
REDIR=WORKS
$ echo "REDIR = "$REDIR
REDIR = WORKS
তবে, আমি যদি অন্য কোনও কমান্ডে স্টপআউট পাইপ করি তবে ভেরিয়েবল সেট হয় না:
$ par_set PIPE FAILS |sed -e's/FAILS/BARFS/'
PIPE=BARFS
$ echo "PIPE = "$PIPE
PIPE =
পাইপ কেন ভেরিয়েবল রফতানি থেকে ফাংশন আটকাবে? টেম্প ফাইল বা নামযুক্ত পাইপগুলি অবলম্বন না করে এটি ঠিক করার কোনও উপায় আছে কি?
মীমাংসিত:
গিলসকে ওয়ার্কিং কোড ধন্যবাদ:
par_set $(echo $*|tr '=' ' ') > >(sed -e's/^/ /' >> ${LOG})
এটি স্ক্রিপ্টটি এভাবে কল করার অনুমতি দেয়:
$ . ./script.sh PROCESS_SUB ROCKS PIPELINES=NOGOOD
$ echo $PROCESS_SUB
ROCKS
$ echo $PIPELINES
NOGOOD
$ cat log
7:20140606155622162731431:script.sh:29581:Parse Command Line parameters. Params must be in matched pairs separated by one or more '=' or ' '.
PROCESS_SUB=ROCKS
PIPELINES=NOGOOD
প্রকল্পটি সম্পূর্ণ কোডে আগ্রহী হলে https://bitbucket.org/adalby/monitor-bash এ বিটবাকেটে হোস্ট করা হয়েছে ।