मेरे पास $PATH
इस तरह सेट करने के लिए एक बश फ़ंक्शन है -
assign-path()
{
str=$1
# if the $PATH is empty, assign it directly.
if [ -z $PATH ]; then
PATH=$str;
# if the $PATH does not contain the substring, append it with ':'.
elif [[ $PATH != *$str* ]]; then
PATH=$PATH:$str;
fi
}
लेकिन समस्या यह है, मुझे अलग-अलग चर के लिए अलग-अलग फ़ंक्शन लिखना होगा (उदाहरण के लिए, $CLASSPATH
जैसे के लिए एक और फ़ंक्शनassign-classpath()
)। मुझे बैश फ़ंक्शन में तर्क पास करने का कोई तरीका नहीं मिला, ताकि मैं इसे संदर्भ द्वारा एक्सेस कर सकूं।
यह बेहतर होगा यदि मेरे पास कुछ है -
assign( bigstr, substr )
{
if [ -z bigstr ]; then
bigstr=substr;
elif [[ bigstr != *str* ]]; then
bigstr=bigstr:substr;
fi
}
किसी भी विचार, कैसे ऊपर की तरह कुछ को प्राप्त करने के लिए बैश में?
assign-path /abc
संलग्न नहीं होंगे /abc
पथ के लिए $ पथ पहले से ही शामिल है /abc/def
, /abcd
, /def/abc
आदि विशेष रूप से आप को नहीं जोड़ सकते /bin
पथ पहले से ही शामिल है /usr/bin
।
$PATH
और इस तरह अपने तर्क के खिलाफ निगेट परीक्षण: add=/bin dir=/usr/bin ; [ -z "${dir%"$add"}" ] || dir="${dir}:${add}"
। मेरे जवाब में मैं इसे इस तरह से करता हूं जितने भी तर्कों के साथ आप केवल उपयोग करना पसंद करते हैं IFS=:
।
$PATH
? और निर्देशिका जोड़ें $PATH
अगर यह पहले से ही वहाँ नहीं है ( सुपर उपयोगकर्ता पर )।