Bash에서 "동적" 경로를 설정하는 올바른 방법은 무엇입니까? (안드로이드 SDK에 적용 가능)

Bash에서 "동적" 경로를 설정하는 올바른 방법은 무엇입니까? (안드로이드 SDK에 적용 가능)

Android SDK를 설치했고 build-tools/android-VERSIONPATH에서 바이너리를 사용할 수 있도록 하기 위해 몇 줄을 추가했습니다.

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결과적으로 PATH 환경 변수는 adt-bundle-linux-x86_64-*/sdk두 가지 모두의 최신 버전을 사용하여 수정되어야 합니다 build-tools/android-*/.

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

관련 정보