.png)
У меня установлен Android SDK, и я хочу, чтобы двоичные файлы build-tools/android-VERSION
были доступны в PATH, поэтому я добавляю несколько строк:
ANDROID_SDK=/Application/Binaries/adt-bundle-linux-x86_64-20140321/sdk/
ANDROID_PATH=$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools:$ANDROID_SDK/build-tools/android-4.4.2/
Вот в чем проблема, я могу обновить SDK в любое время, так что build-tools/android-4.4.2/
могу измениться после этого. Если так, мне придется снова редактировать файл и обновить android-version
часть в $PATH
Поэтому я изменил профиль примерно так:
ANDROID_SDK=/Application/Binaries/adt-bundle-linux-x86_64-20140321/sdk/
ANDROID_PATH=$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
for x in $ANDROID_SDK/build-tools/android-*/; do
export PATH=$PATH:$x
done
Это выглядит глупо. Как написать это лучше?
решение1
Идеальный способ — создать каталог мягких ссылок с именем adt
и пересоздавать его после внесения изменений в SDK.
Таким образом, ваше PATH
останется прежним.
решение2
При таком подходе в двух случаях вывод ls
, отсортированный по времени и только для каталогов ( -td
), передается команде , которая затем выбирает первую строку. Результатом является то, что для изменения переменной среды PATH следует использовать head
самую последнюю версию adt-bundle-linux-x86_64-*/sdk
и .build-tools/android-*/
ANDROID_SDK=$( ls -td /Application/Binaries/adt-bundle-linux-x86_64-*/sdk/ | head -n 1 )
if ! [ -z $ANDROID_SDK ] ; then
ANDROID_PATH=$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools
ANDROID_BUILDTOOLS=$( ls -td $ANDROID_SDK/build-tools/android-*/ | head -n 1 )
if ! [ -z $ANDROID_BUILDTOOLS ] ; then
echo "Adding $ANDROID_BUILDTOOLS to PATH"
export PATH=$PATH:$ANDROID_BUILDTOOLS
else
echo "Couldn't find build tools"
fi
else
echo "Couldn't find SDK"
fi
решение3
PATH="$PATH:$(printf '%s:' $ANDROID_SDK/build-tools/android-[0-9.]*/)"
Должно сработать.
cd ~ ; mkdir dir1 dir2 dir3
( PATH=$(printf %s: $HOME/dir[12])
echo "$PATH" )
/home/mikeserv/dir1:/home/mikeserv/dir2:
Another method:
PATH="$PATH:$( set -- `printf '%s\n' "$ANDROID_SDK"*/android[0-9.]*/ |
sort -rV` ; [ -d "$1" ] && echo "$1" )"
Это использует преимуществоsort's -Version
обработка, которая должна гарантировать, что позиционный параметр"$1"
всегда настроен на последнюю версию вашего Android SDK. Например:
БЕЗ СОРТИРОВКИ:
% printf %s\\n ~/dir[0-9]*
/home/mikeserv/dir1
/home/mikeserv/dir2
/home/mikeserv/dir23
/home/mikeserv/dir3
/home/mikeserv/dir45
С ЭТИМ:
% printf %s\\n ~/dir[0-9]* | sort -V
/home/mikeserv/dir1
/home/mikeserv/dir2
/home/mikeserv/dir3
/home/mikeserv/dir23
/home/mikeserv/dir45
И ОБРАТНО:
% printf %s\\n ~/dir[0-9]* | sort -rV
/home/mikeserv/dir45
/home/mikeserv/dir23
/home/mikeserv/dir3
/home/mikeserv/dir2
/home/mikeserv/dir1