Bashで「動的」パスを設定する正しい方法は何ですか? (Android SDKに適用可能)

Bashで「動的」パスを設定する正しい方法は何ですか? (Android 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

理想的なアプローチは、というソフトリンクディレクトリを作成し、adtSDKが変更された後にそれを再生成することです。

したがって、あなたPATHの意志は変わりません。

答え2

このアプローチでは、lsディレクトリに対してのみ時間順に出力された2倍()がコマンドにパイプさ-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

関連情報