在 bash 中設定「動態」路徑的正確方法是什麼? (適用於安卓 SDK)

在 bash 中設定「動態」路徑的正確方法是什麼? (適用於安卓 SDK)

我安裝了 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) 的輸出透過管道傳輸到head命令,然後該命令選擇第一行。結果是應該使用adt-bundle-linux-x86_64-*/sdk兩者的最新版本build-tools/android-*/來修改 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

答案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

相關內容