你是shell脚本世界的新手,我遇到了几个问题。我正在编写一个调用两个AWS S3 Buckets的bash脚本,并列出已上载的最新文件。 在“长跑”中,必须下载这两个文件,并使用CLI复制到RDS PostgreSQL数据库中的2个现有表。 到目前为止,这就是我所拥有的:
#!/bin/bash
printf "Looking up newest files added...\n";
AUTO= $(aws s3 ls bucketx --recursive | sort | tail -n 1| awk '{print $4}');
IMMO= $(aws s3 ls buckety --recursive | sort | tail -n 1 | awk '{print $4}');
echo AUTO;
echo IMMO;
问题是,当我直接在终端中执行AWS命令时,这是我无法获得的,并且顺利运行并且应该按照应有的方式行事。但是在脚本中,我收到以下错误:
Looking up newest files added...
./shellTest.sh: line 6: bucketx/14.9.2016.csv: No such file or directory
./shellTest.sh: line 7: buckety/14.9.2016.csv: No such file or directory
有人能告诉我我做错了什么吗?这是一个逻辑问题还是仅仅是一个问题。句法问题? 我期待着回声'命令只打印出变量x和y的内容,但没有打印任何内容..
干杯
答案 0 :(得分:2)
您在AUTO中想要的是最新键的值,因此您需要一个字符串
AUTO="$(aws s3 ls bucketx --recursive | sort | tail -n 1| awk '{print $4}')"
IMMO="$(aws s3 ls buckety --recursive | sort | tail -n 1 | awk '{print $4}')"
所以AUTO
和IMMO
将保存值(键的字符串值) - 如果省略引号,系统将尝试查找引用并将抱怨该文件不存在本地
要显示您需要的值
echo $AUTO
echo $IMMO
见下文
这个不起作用
$ AUTO= $(aws s3 ls <bucket> --recursive | sort | tail -n 1| awk '{print $4}');
-bash: database/instantclient-sdk-linux.x64-11.2.0.4.0.zip: No such file or directory
但是这个没问题
$ AUTO="$(aws s3 ls <bucket> --recursive | sort | tail -n 1| awk '{print $4}')"
$ echo $AUTO
database/instantclient-sdk-linux.x64-11.2.0.4.0.zip