【发布时间】:2021-09-03 08:21:15
【问题描述】:
这是我的设置:
- 我使用的是运行自定义 Docker 映像的 AWS Batch
- startup.sh 文件是一个入口点脚本,它读取文本文件的第 n 行并将其从 s3 复制到 docker。
- 例如,如果 .txt 文件的第一行是“Startup_00001/Startup_000018 Startup_000019”,则 bash 脚本会读取这一行,并使用 for 循环将它们复制过来。
- 这是我的 bash 脚本的一部分:
STARTUP_FILE_S3_URL=s3://cmtestbucke/Config/ Startup_FileNames=$(sed -n ${LINE}p file.txt) for i in ${Startup_FileNames} do Startup_FileURL=${STARTUP_FILE_S3_URL}$i echo $Startup_FileURL aws s3 cp ${Startup_FileURL} /home/CM_Projects/ & done
- 这是 aws 的日志输出:
s3://cmtestbucke/Config/Startup_000017
s3://cmtestbucke/Config/Startup_000018
s3://cmtestbucke/Config/Startup_000019
已完成 727 字节/727 字节 (7.1 KiB/s),剩余 1 个文件下载:s3://cmtestbucke/Config/Startup_000018 到 Data/Config/Startup_000018
已完成 731 字节/731 字节 (10.1 KiB/s),剩余 1 个文件下载:s3://cmtestbucke/Config/Startup_000017 到 Data/Config/Startup_000017
致命错误:*调用 HeadObject 操作时发生错误 (404):键 “Config/Startup_000019”不存在。*
- 我的 s3 存储桶肯定包含对象 s3://cmtestbucke/Config/Startup_000019
- 我注意到无论文件名如何都会发生这种情况。最后一次迭代总是给出这个错误。
- 我使用相同的 aws 命令在本地测试了这个 bash 逻辑。它会复制所有 3 个文件。
谁能帮我弄清楚这里出了什么问题?
【问题讨论】:
-
看起来最后一项的名称中可能有一个尾随空格。你能检查一下这是否是根本原因吗?
-
@OleksiiDonoha 没有空格。然而,这让我想到了 EOL,结果发现它是 windows(CR LF)。我将其更改为 unix (LF),因为我运行的 docker 映像是 Ubuntu。现在它起作用了。感谢您的帮助。
标签: bash amazon-web-services amazon-s3