wget在终端工作,但没有使用shell脚本

时间:2017-06-30 00:40:36

标签: shell wget

我有一个简单的shell脚本,如下所示。

#!/usr/bin/env bash
wget -O glove.840B.300d.zip http://nlp.stanford.edu/data/glove.840B.300d.zip

当我使用sh命令运行它时,我收到以下错误。

--2017-06-29 20:35:41--  http://nlp.stanford.edu/data/glove.840B.300d.zip%0D
Resolving nlp.stanford.edu (nlp.stanford.edu)... 171.64.67.140
Connecting to nlp.stanford.edu (nlp.stanford.edu)|171.64.67.140|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://nlp.stanford.edu/data/glove.840B.300d.zip%0d [following]
--2017-06-29 20:35:41--  https://nlp.stanford.edu/data/glove.840B.300d.zip%0d
Connecting to nlp.stanford.edu (nlp.stanford.edu)|171.64.67.140|:443... connected.
HTTP request sent, awaiting response... 404 Not Found
2017-06-29 20:35:41 ERROR 404: Not Found.

但是当我从终端运行相同的wget命令(用shell脚本编写)时,它运行正常!我的shell脚本有什么问题?我缺少什么?

2 个答案:

答案 0 :(得分:2)

注意最后的%0d。它看起来像是在某个地方,你在Linux环境中使用DOS / Windows行结尾。 %0d是"回车"字符,因为在Windows CR LF(回车换行)用于换行。 Unix只需要LF,并在命令行中包含额外的字符。

请参阅Difference between CR LF, LF and CR line break types?

答案 1 :(得分:0)

您已使用使用DOS行结尾的内容编辑了脚本。所以wget在行尾看到虚假的回车符(十六进制0D)。

用Unix(LF)替换DOS行尾(CR-LF),一切都会好的。