0

/usr/libビルドディレクトリとソースディレクトリ(共有オブジェクトバイナリを含む)からシステムと/usr/includeディレクトリにそれぞれファイルを自動的にコピーするbashスクリプトを作成しようとしています。

私が以下を実行すると:

#!/bin/bash

RELEASE_ARG = "--release"
DEBUG_ARG   = "--debug"

DEST_NAME = "libEngine.so"

SRC_NAME = "libEngineSO.so"

ENGINE_DBG_DEST = "/usr/lib/Stitches/Debug/$DEST_NAME"
ENGINE_REL_DEST = "/usr/lib/Stitches/Release/$DEST_NAME"

ENGINE_REL_SRC = "$STITCH_ROOT/Engine__Release/$SRC_NAME"
ENGINE_DBG_SRC = "$STITCH_ROOT/Engine__Debug/$SRC_NAME"

if [ ! -z $1 ]; then 
    #foo
    echo "No argument specified; please specify either ${RELEASE_ARG} or $DEBUG_ARG. K BAI\n"
    exit
elif [ -z $1 -eq RELEASE_ARG ]; then
    #wat
    echo "If you actually chose this option, you better be damn ready to distribute...\n"
    echo "Updating Release directory in $ENGINE_REL_DEST\n"

    cp $ENGINE_REL_SRC $ENGINE_REL_DEST

elif [ -z $1 -eq DEBUG_ARG ]; then
    #reasonable and realistic
    echo "Good choice...\n"
    echo "Updating Debug directory in $ENGINE_DBG_DEST\n"
    cp $ENGINE_DBG_SRC $ENGINE_DBG_DEST
fi

echo "Sex ;)"

私はこの出力を取得します:

x@x ~/Programming/Stitches-Qt/scripts $ sh postbuild.sh --debug
postbuild.sh: 3: postbuild.sh: DEBUG: not found
postbuild.sh: 5: postbuild.sh: RELEASE_ARG: not found
postbuild.sh: 6: postbuild.sh: DEBUG_ARG: not found
postbuild.sh: 8: postbuild.sh: DEST_NAME: not found
postbuild.sh: 10: postbuild.sh: SRC_NAME: not found
postbuild.sh: 12: postbuild.sh: ENGINE_DBG_DEST: not found
postbuild.sh: 13: postbuild.sh: ENGINE_REL_DEST: not found
postbuild.sh: 15: postbuild.sh: ENGINE_REL_SRC: not found
postbuild.sh: 16: postbuild.sh: ENGINE_DBG_SRC: not found
No argument specified; please specify either  or . K BAI

ご覧のとおり、変数を不適切に使用している必要があります。ここでやろうとしていることをどのように達成しますか?

PS、そして私はrootでない限りこれを行うことができないことを知っているので、/usr/lib|にサブディレクトリを作成しました。/usr/includeだから私はそれを自分のユーザー名にchownすることができました。だから、これはうまくいくはずです...

4

1 に答える 1

4

bash では任意の空白を使用できません。

RELEASE_ARG="--release"
DEBUG_ARG="--debug"

を使用する場合は引用する必要がありますtest

if [ ! -z "$1" ]; then 
于 2012-09-03T05:40:24.657 に答える