在 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

相关内容