我正在尝试使用shell脚本和命令wget从 Amazon S3下载文件。 cuestion中的文件具有公共权限,我可以使用标准浏览器下载它。到目前为止,这是我在剧本中的内容:
wget --no-check-certificate -P /tmp/soDownloads https://s3-eu-west-1.amazonaws.com/myBucket/myFolder/myFile.so
cp /tmp/soDownloads/myFile.so /home/hadoop/lib/native
问题对我来说有点奇怪。虽然我可以直接从终端下载文件(只需输入wget命令),但当我尝试执行包含相同命令行的shell脚本时会弹出错误(脚本使用> sh myScript运行.SH )。
--2014-06-26 07:33:57-- https://s3-eu-west-1.amazonaws.com/myBucket/myFolder/myFile.so%0D
Resolving s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)... XX.XXX.XX.XX
Connecting to s3-eu-west-1.amazonaws.com (s3-eu-west-1.amazonaws.com)|XX.XXX.XX.XX|:443... connected.
WARNING: cannot verify s3-eu-west-1.amazonaws.com's certificate, issued by ‘/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3’:
Unable to locally verify the issuer's authority.
HTTP request sent, awaiting response... 403 Forbidden
2014-06-26 07:33:57 ERROR 403: Forbidden.
现在,我知道这可能只是我身边的一个乞丐错误,但我无法检测到任何类型的任何拼写错误或错误。我很感激你能帮我解决这个问题。
作为一个说明,我想注意我在亚马逊的 弹性MapReduce 框架提供的EC2实例中运行该脚本,如果有的话与此问题有关。
答案 0 :(得分:1)
我怀疑你用来编写该脚本的编辑器给你留下了一点“礼物”。
命令行不一样。仔细看看:
--2014-06-26 07:33:57-- ... myFolder/myFile.so%0D
^^^ what's this about?
这是ASCII CR
的urlencoding,十进制13十六进制0x0D
。脚本中有一个嵌入式回车符,不应该存在,wget将其视为URL中的最后一个字符,并将其发送到S3。
使用less
实用程序查看文件或vi
之类的编辑器,这个迷路角色可能会显示为^M
...或者,如果它们全部都在文件,当你用vi
打开它时,你应该在屏幕底部看到这个:
"foo" [dos] 1L, 5C
^^^^^
如果你看到了,那就在vi里面......
:set ff=unix[enter]
:x[enter]
...将转换行结尾,并将文件保存为可用的格式,如果这确实是您遇到的问题。
如果您正在编辑Windows上的文件,您将需要使用一个编辑器,该编辑器了解如何使用换行符保存文件,而不是回车。