যে কোনও ভেরিয়েবলে কেবল একবার ডিরেক্টরি যুক্ত করুন


1

আমি এই প্রশ্নটি ইতিমধ্যে সেখানে না থাকলে directory PATH এ যুক্ত ডিরেক্টরিটি দেখে শুরু করেছি । আমার ক্ষেত্রে, আমি LD_LIBRARY_PATH তেও একই কাজ করতে চেয়েছিলাম। প্রতিটি চলকটির জন্য স্ক্রিপ্ট না লিখে কীভাবে এটি করবেন?

উত্তর:


1

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

1

এই নিবন্ধ অনুসারে, 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

বাশ সহ, প্রয়োজন নেই eval: local value="${!1}"- এটি "ভেরিয়েবল ইন্ডিয়ারেশন
গ্লেন জ্যাকম্যান

এছাড়াও, ALLCAPSVARS ব্যবহার করার অভ্যাস থেকে বেরিয়ে আসুন। শেল জন্য তাদের ছেড়ে দিন। একদিন আপনি ঘটনাক্রমে লিখবেন PATH=fooএবং তারপরে আপনার স্ক্রিপ্টটি কেন ভাঙা হয়েছে তা
ভাববেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.