【问题标题】:Bash variable not working in http request/response bodyBash 变量在 http 请求/响应正文中不起作用
【发布时间】:2022-10-25 22:28:50
【问题描述】:
#!/bin/bash

object=$1
tenant=$2

server=$(sshpass -p 'password' ssh -tt root@ipaddress "/opt/something/sh/mysql -A 'admin_site' -e 'select id from something_servers where tenantcode=$2' | grep -o '[0-9]*'")

http -b "http://ipaddress/?app=something&t=users&v=users&server=$server&apikey=apikey&action=something.$1.list"

一切似乎都很好。变量 $server 的值应该是“24”。但是,当我在 http 请求中调用它时,它根本不起作用……老实说,我不知道。我通过回显它来测试变量的值,它是正确的。但是由于某种原因,在请求中使用它时它没有。

有任何想法吗?

【问题讨论】:

  • http 命令是什么?您打算使用wget 还是curl
  • 如果你做echo "http://ipaddress/?app=something&t=users&v=users&server=$server&apikey=apikey&action=something.$1.list",你会看到什么?
  • 为什么你使用$1$2 而不是$object$tenant?分配命名变量有什么意义?
  • 顺便说一句,您必须确保 $2 已正确转义以用作 SQL 字符串文字,并且 $1 还必须进行 URL 编码
  • 我会在打开-x 的情况下运行脚本,以查看实际传递给http 命令的内容。如果这看起来不错,我会怀疑 http-script 中的错误(您没有显示)。还有什么奇怪的(虽然没有错):您设置了两个变量(objecttenant),之后再也没有使用它们。

标签: mysql linux bash shell


【解决方案1】:

您的代码创建了一个名为 object 的变量,并将其值设置为存储在名为 1 的变量中的值。

它创建一个名为tenant的变量并将其设置为存储在名为2的变量中的值。

然后它创建一个名为 server 的变量,然后调用一个子 shell 并在 $() 之间运行例程。

在子程序中:

你使用单引号

-e 'select id from something_servers where tenantcode=$2'

但是要使变量插值起作用,您需要使用双引号

也许这是你的问题?

【讨论】:

  • 你会发现整个 ssh 命令是双引号的,所以单引号是字面的,扩展仍然会发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多