我正在尝试使用 shell 脚本和命令 wget 从 Amazon S3 下载文件。提示中的文件具有公共(public)权限,我可以使用标准浏览器下载它。到目前为止,这是我在脚本中的内容:
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 运行)。嘘).
--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.
现在,我知道这可能只是我这边的初学者错误,但我无法检测到任何拼写错误或任何类型的错误。如果您能为我提供解决此问题的任何帮助,我将不胜感激。
请注意,我想注意到我正在 Amazon Elastic MapReduce 框架提供的 EC2 实例中运行脚本,如果它与问题。
最佳答案
我怀疑你用来编写那个脚本的编辑给你留下了一个小“礼物”。
命令行不一样。仔细看:
--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 上编辑文件,您需要使用了解如何使用换行符而不是回车符保存文件的编辑器。
关于linux - 从 S3 下载 Shell 脚本 wget - 禁止错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24425020/