¿Cuál es la forma correcta de configurar la RUTA "dinámica" en bash? (para SDK de Android)

¿Cuál es la forma correcta de configurar la RUTA "dinámica" en bash? (para SDK de Android)

Tengo instalado el SDK de Android y quiero que los binarios build-tools/android-VERSIONestén disponibles en PATH, así que agrego algunas líneas:

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/

Este es el problema: puedo actualizar el SDK en cualquier momento, por lo que build-tools/android-4.4.2/podría cambiarlo. Si es así, tendría que editar el archivo nuevamente y actualizar la android-versionparte en $PATH.

Entonces cambié el perfil a algo como esto,

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

Parece una tontería, ¿hay alguna forma mejor de escribirlo?

Respuesta1

La forma ideal es crear un directorio de enlace suave llamado adty volver a crearlo después de los cambios en el SDK.

Por lo tanto, tu PATHseguirás siendo el mismo.

Respuesta2

En este enfoque, en dos ocasiones la salida de ls, ordenada a tiempo y solo para directorios ( -td), se canaliza al headcomando que luego selecciona la primera línea. El resultado es que se debe utilizar la versión más reciente de ambos adt-bundle-linux-x86_64-*/sdky de build-tools/android-*/para modificar la variable de entorno 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

Respuesta3

PATH="$PATH:$(printf '%s:' $ANDROID_SDK/build-tools/android-[0-9.]*/)"

Deberia trabajar.

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

que se aprovechasort's -Versionmanejo, que debe garantizar que el parámetro posicional"$1"siempre está configurado en la última versión de su SDK de Android. Por ejemplo:

SIN CLASE:

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

CON ESO:

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

Y AL INVERTIDO:

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

información relacionada