无法将变量传递到.SH文件中的CURL。在Bash中工作

时间:2013-08-22 02:39:27

标签: bash curl cygwin

此代码直接在Bash中使用。

$ var=/2013/08/21/politics/nsa-fisa-court/index.html
$ curl www.cnn.com/$var

但是,如果我将确切的代码放入 .SH 文件并从Bash调用它,我会得到:

  

curl:(52)来自服务器的空回复

我做错了什么?

3 个答案:

答案 0 :(得分:2)

您创建的文件a.sh在其中有窗口行结尾(CR-LF),这会导致curl在结尾处请求带有CR的URL,这被{视为错误{1}}属于CNN的服务器。

使用nginx(或等效的)修复行结尾,它应该可以正常工作。

答案 1 :(得分:0)

您需要使用引号修复它们。 a.sh可能如下所示:

#!/bin/sh

var="/2013/08/21/politics/nsa-fisa-court/index.html"
curl www.cnn.com/"$var"

更改文件的权限。

chmod a+x a.sh

然后执行./a.sh

答案 2 :(得分:0)

set -xv放在文件的开头,将set +xv放在最后。 set -xv将打开详细和调试。

在shell脚本中的每一行执行之前,它会显示插入变量,globs,pattern等之前的行,以及之后的样子。

可能不是你期望的那条线。

另外,您使用什么编辑器来构建shell脚本?如果您在Windows上使用记事本创建shell脚本然后将其发布到Linux计算机(或使用cygwin),则会出现错误的行结尾。如果你有错误的行结尾,你会看到各种无法解释的错误。

顺便说一句,报价不会有任何区别。虽然这是一个好主意,但变量值中的空格没有问题。