আমি এই প্রশ্নটি ইতিমধ্যে সেখানে না থাকলে directory PATH এ যুক্ত ডিরেক্টরিটি দেখে শুরু করেছি । আমার ক্ষেত্রে, আমি LD_LIBRARY_PATH তেও একই কাজ করতে চেয়েছিলাম। প্রতিটি চলকটির জন্য স্ক্রিপ্ট না লিখে কীভাবে এটি করবেন?
আমি এই প্রশ্নটি ইতিমধ্যে সেখানে না থাকলে directory PATH এ যুক্ত ডিরেক্টরিটি দেখে শুরু করেছি । আমার ক্ষেত্রে, আমি LD_LIBRARY_PATH তেও একই কাজ করতে চেয়েছিলাম। প্রতিটি চলকটির জন্য স্ক্রিপ্ট না লিখে কীভাবে এটি করবেন?
উত্তর:
pathmunge/ ইত্যাদি / প্রোফাইলে একটি ভিন্নতা দেওয়া হয়েছে
munge () {
if [[ ":${!1}:" != *:"$2":* ]]; then
if [[ $3 == after ]]; then
declare -g $1="${!1}:$2"
else
declare -g $1="$2:${!1}"
fi
fi
}
আমরা করতে পারি:
$ A=a
$ munge A b after
$ echo $A
a:b
$ munge A c before
$ echo $A
c:a:b
$ munge A a before
$ echo $A
c:a:b
এই নিবন্ধ অনুসারে, http: //www.linuxj Journal.com/content/return-values-bash-funitions, এর নাম অনুসারে বাইরের ভেরিয়েবলটি পরিবর্তন করা সম্ভব:
function myfunc()
{
local __resultvar=$1
local myresult='some value'
eval $__resultvar="'$myresult'"
}
myfunc result
echo $result
এখন, এই স্ক্রিপ্ট এবং মূল প্রশ্নটি ব্যবহার করে, আমি দুটি ফাংশন লিখেছি, একটি বর্তমান মানের আগে যুক্ত করতে এবং একটি পরে যুক্ত করার জন্য:
function add_directory_before()
{
local VAR=$1
local VALUE=$(eval echo \$${VAR})
if [ -d $2 ] && [[ ":$VALUE:" != *":$2:"* ]] ; then
eval $VAR=$2:$VALUE
fi
}
function add_directory_after()
{
local VAR=$1
local VALUE=$(eval echo \$${VAR})
if [ -d $2 ] && [[ ":$VALUE:" != *":$2:"* ]] ; then
eval $VAR=$2:$VALUE
fi
}
এবং ব্যবহার:
add_directory_after LD_LIBRARY_PATH /usr/local/lib64
অথবা
add_directory_before PATH $HOME/bin
PATH=fooএবং তারপরে আপনার স্ক্রিপ্টটি কেন ভাঙা হয়েছে তা
eval:local value="${!1}"- এটি "ভেরিয়েবল ইন্ডিয়ারেশন