1

我在服务器上有一个脚本,它的最后一行是一个 echo,它打印一个 URL 的值,如下所示:

.
.     < the script code here >
.
echo "url"      # The last line of this script

我无法更改此脚本,我只能捕获它的返回值,也就是说,将 url 捕获为在我的本地 bash 脚本中声明的变量中的返回值,如下所示:

cmd_url=$(ssh . . . <distinct script>)

这是此类 URL 的示例(出于保密原因,我当然更改了值)

http://mydomain:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/running?type=app&name=AppTest&pw=abcd&9e0Xy

上面的例子主要是一个 WebObjects 应用程序信息 URL,它可以作为 curl 命令的参数传递,以便知道应用程序是否正在运行(所以这个例子中的应用程序名称是AppTest和我必须提供的 JavaMonitor 密码为了能够查询是abcd&9e0Xy )

如果我打开一个终端,我可以简单地将这个 url 粘贴在单引号中并运行以下命令

curl -s -X GET 'http://mydomain:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/running?type=app&name=AppTest&pw=abcd9e0Xy'

因此,我必须将字符串括在单引号内以转义特殊字符,并且效果很好,如果应用程序 AppTest 实际正在运行,则 curl 返回YES

现在我需要做的就是完全按照我上面写的去做,除了它是在 bash 脚本中完成的,而且 url 不是手动写在单引号内,而是存储在一个变量中。

这是我所做的:

cmd_url=$(ssh . . . <distant script>)
ret_msg=$(curl -s -X GET "$cmd_url")

问题是(我认为)由于 URL 中的特殊字符。curl 似乎无法正确解释该论点。我什至删除了双引号,但这也没有解决问题。

所以我的问题是:我应该如何进行?如何将已经双引号的字符串(回想一下,这是在远程服务器上完成的,我无法更改)转换为单引号字符串?所以 curl 会把它当作一个字符序列而不解释它们?就像我上面在终端示例中写的:

'http://mydomain:56789/cgi-bin/WebObjects/JavaMonitor.woa/admin/running?type=app&name=AppTest&pw=abcd9e0Xy'

到目前为止,我已经尝试了可能的单引号串联的不同组合,但问题仍然存在。curl 根本不返回任何内容,或者我收到一条错误消息,指示未提供密码。

任何想法?如何在 bash 脚本中将已经双引号的局部变量传递给 curl?

提前致谢

4

1 回答 1

1

您可以使用tr将双引号翻译成单引号

$ echo \"foo\" | tr '"' "'"
'foo'
于 2015-05-05T10:47:46.943 回答