0

此代码直接在 Bash 中工作。

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

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

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

我究竟做错了什么?

4

3 回答 3

2

您创建的文件中包含 windows 行结尾 (CR-LF),这会导致 curl 请求以 CR 结尾的 URL,属于 CNNa.sh的服务器将其视为错误。nginx

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

于 2013-08-22T03:32:32.920 回答
1

你需要用引号来修复它们。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

于 2013-08-22T03:02:09.570 回答
1

放在set -xv文件的开头和set +xv结尾。将set -xv打开详细和调试。

在 shell 脚本中的每一行执行之前,它将显示在变量、glob、模式等被插值之前该行的样子,以及它们之后的样子。

它可能不是您期望的线条。

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

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

于 2013-08-22T03:24:19.187 回答