Qual é o caminho certo para definir o PATH “dinâmico” no bash? (para android sdk)

4

Eu tenho o android sdk instalado, e quero que os binários em build-tools/android-VERSION estejam disponíveis no PATH, então adiciono algumas linhas:

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/

Aqui está o problema, eu posso atualizar o SDK a qualquer momento, então build-tools/android-4.4.2/ pode mudar em cima disso. Se assim for, eu teria que editar o arquivo novamente e atualizar a parte android-version em $ PATH

Então eu mudei o perfil para algo assim,

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

Isso parece burro, alguma maneira melhor de escrever isso?

    
por daisy 30.03.2014 / 10:00

3 respostas

3

A maneira ideal é criar um diretório de link simples chamado adt e recriá-lo depois que o SDK for alterado.

Assim, seu PATH permanecerá o mesmo.

    
por 30.03.2014 / 11:27
0

Nesta abordagem, em duas ocasiões, a saída de ls , classificada na hora e apenas para diretórios ( -td ), é canalizada para o comando head , que seleciona a primeira linha. O resultado é que a versão mais recente de ambos os adt-bundle-linux-x86_64-*/sdk e build-tools/android-*/ deve ser usada para a modificação da variável de ambiente PATH.

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
    
por 30.03.2014 / 12:06
0
PATH="$PATH:$(printf '%s:' $ANDROID_SDK/build-tools/android-[0-9.]*/)"

Deve funcionar.

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" )"

Isso tira proveito do tratamento sort's -Version , que deve garantir que o parâmetro posicional "$1" esteja sempre definido para a versão mais recente do seu Android SDK. Por exemplo:

SEM CLASSE:

% printf %s\n ~/dir[0-9]*
/home/mikeserv/dir1
/home/mikeserv/dir2
/home/mikeserv/dir23
/home/mikeserv/dir3
/home/mikeserv/dir45

COM TI:

%  printf %s\n ~/dir[0-9]* | sort -V
/home/mikeserv/dir1
/home/mikeserv/dir2
/home/mikeserv/dir3
/home/mikeserv/dir23
/home/mikeserv/dir45

E REVERSED:

% printf %s\n ~/dir[0-9]* | sort -rV
/home/mikeserv/dir45
/home/mikeserv/dir23
/home/mikeserv/dir3
/home/mikeserv/dir2
/home/mikeserv/dir1
    
por 30.03.2014 / 11:34