如果存在,则丢弃DynamoDB

问题描述 投票:0回答:1

我正在尝试使用docker在我的本地设置dynamodb。我希望通过使用makefile来控制初始化。这是我正在使用的makefile文件

TABLE_NAME="users"

create_db:
    @aws dynamodb --endpoint-url http://localhost:8042 create-table \
    --table-name $(TABLE_NAME) \
    --attribute-definitions \
        AttributeName=userID,AttributeType=N \
    --key-schema \
        AttributeName=userID,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=5,WriteCapacityUnits=5 >> /dev/null;

drop_db: check_db
    check_db; if [test $$? -eq 1] then \
        @aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name $(TABLE_NAME); \
    fi

check_db:
    -@aws dynamodb --endpoint-url http://localhost:8042 describe-table --table-name $(TABLE_NAME);

AWS没有提供像MYSQL这样的DROP IF EXISTS功能,因此我试图使用describe table的输出来检查表的存在。但是出现以下错误

check_db; if [test $? -eq 1] then \
        @aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name "requests"; \
    fi
/bin/sh: -c: line 0: syntax error near unexpected token `fi'
/bin/sh: -c: line 0: `check_db; if [test $? -eq 1] then     @aws dynamodb --endpoint-url http://localhost:8042 delete-table --table-name "requests"; fi'
make: *** [drop_db] Error 2

我是makefile的新手,无法弄清楚如何解决该错误。上面的makefile有什么问题?还有没有更好的方法来检查发电机表的存在

docker makefile amazon-dynamodb
1个回答
0
投票

这不是Makefile问题,这是您的Shell脚本中的语法错误。基本上,您需要在then之前输入分号。

$ false; if [test $? -eq 1] then echo foo; fi
bash: syntax error near unexpected token `fi'

您还需要决定使用[还是test,因为当前语法也不正确。

$ false; if [test $? -eq 1]; then echo foo; fi

Command '[test' not found, did you mean:

...

工作版本:

$ false; if [ $? -eq 1 ]; then echo foo; fi
foo
© www.soinside.com 2019 - 2024. All rights reserved.