Wie kann ich in Bash einen „dynamischen“ Pfad richtig festlegen? (für Android-SDK)

Wie kann ich in Bash einen „dynamischen“ Pfad richtig festlegen? (für Android-SDK)

Ich habe das Android SDK installiert und möchte, dass die Binärdateien build-tools/android-VERSIONim PATH verfügbar sind. Daher füge ich einige Zeilen hinzu:

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/

Hier ist das Problem, ich könnte das SDK jederzeit aktualisieren und es build-tools/android-4.4.2/könnte sich daher ändern. In diesem Fall müsste ich die Datei erneut bearbeiten und den android-versionTeil in $PATH aktualisieren.

Also habe ich das Profil in etwa so geändert:

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

Das sieht dumm aus. Gibt es eine bessere Möglichkeit, es zu schreiben?

Antwort1

Die ideale Vorgehensweise besteht darin, ein Softlink-Verzeichnis mit dem Namen zu erstellen adtund es nach SDK-Änderungen neu zu erstellen.

Somit PATHbleibt Ihr Wille derselbe.

Antwort2

Bei diesem Ansatz wird die Ausgabe von zweimal ls, sortiert nach Zeit und nur nach Verzeichnissen ( -td), an den Befehl weitergeleitet head, der dann die erste Zeile auswählt. Das Ergebnis ist, dass die neueste Version sowohl von als adt-bundle-linux-x86_64-*/sdkauch von build-tools/android-*/für die Änderung der Umgebungsvariable PATH verwendet werden sollte.

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

Antwort3

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

Sollte arbeiten.

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

Das nutztsort's -VersionHandhabung, die sicherstellen soll, dass der Positionsparameter"$1"ist immer auf die neueste Version Ihres Android SDK eingestellt. Beispiel:

OHNE SORTIERUNG:

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

DAMIT:

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

UND UMGEKEHRT:

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

verwandte Informationen