Ben böyle ayarlamak için bir bash işlevi var $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
}
Ama sorun şu ki, farklı değişkenler için farklı işlevler yazmak zorundayım (örneğin, $CLASSPATH
benzeri başka bir işlev assign-classpath()
vb.). Bash işlevine argüman iletmenin bir yolunu bulamadım, böylece referansla erişebilirim.
Böyle bir şeyim olsaydı daha iyi olurdu -
assign( bigstr, substr )
{
if [ -z bigstr ]; then
bigstr=substr;
elif [[ bigstr != *str* ]]; then
bigstr=bigstr:substr;
fi
}
Herhangi bir fikir, nasıl bash yukarıdaki gibi bir şey elde etmek?
assign-path /abc
ekler olmayacak /abc
$ PATH zaten içeriyorsa PATH /abc/def
, /abcd
, /def/abc
vb Özellikle ekleyemezsiniz /bin
YOLU zaten içeriyorsa /usr/bin
.
$PATH
gibi argümanları karşı ve negate testi: add=/bin dir=/usr/bin ; [ -z "${dir%"$add"}" ] || dir="${dir}:${add}"
. Cevabımda bunu sadece istediğiniz kadar argümanla yapıyorum IFS=:
.
$PATH
nokta üst üste işaretli listelere değer ekleme özel (örnek) sorunuyla ilgili: Nasıl temiz bir şekilde ekleyebilirim ? ve orada $PATH
değilse dizini ekle ( Süper Kullanıcı'da ).