Mam funkcję bash, aby ustawić w $PATH
ten sposób -
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
}
Ale problem polega na tym, że muszę napisać inną funkcję dla różnych zmiennych (na przykład inną funkcję dla $CLASSPATH
podobnych assign-classpath()
itp.). Nie mogłem znaleźć sposobu na przekazanie argumentu do funkcji bash, aby móc uzyskać do niej dostęp przez odniesienie.
Byłoby lepiej, gdybym miał coś takiego -
assign( bigstr, substr )
{
if [ -z bigstr ]; then
bigstr=substr;
elif [[ bigstr != *str* ]]; then
bigstr=bigstr:substr;
fi
}
Każdy pomysł, jak osiągnąć coś takiego jak wyżej w bash?
assign-path /abc
nie dołączy /abc
do PATH jeśli $ PATH zawiera już /abc/def
, /abcd
, /def/abc
itd. Szczególnie nie można dodać /bin
, jeśli PATH zawiera już /usr/bin
.
$PATH
i anulować sprawdzian przed swoimi argumentami jak: add=/bin dir=/usr/bin ; [ -z "${dir%"$add"}" ] || dir="${dir}:${add}"
. W mojej odpowiedzi robię to w ten sposób, używając tylu argumentów, ile tylko chcesz IFS=:
.
$PATH
? i Dodaj katalog do, $PATH
jeśli jeszcze go nie ma (w trybie Super User ).