【发布时间】:2016-05-09 04:00:50
【问题描述】:
我有一个解析服务器列表的脚本,如果情况正确,我会查找一些内容并执行命令。 主服务器通过 ssh 连接到它们,执行 EOF 语句中的所有命令:
#!/bin/bash
# parsing servers
# defining one local variable $VAR
ssh -T -p 1234 root@"server-ip" "$variable" << 'EOF'
# doing some stuff...
var_result=$(mysql -hhost -uuser '-ppasswort' -Ddatabase -N -e "SELECT something FROM somewhere WHERE value=$VAR;")
EOF
如果我从 EOF 中删除单引号,我知道变量可以通过,但如果我这样做,mysql 语句将无法工作并且一切都会中断。
我知道有很多方法可以传递变量,但是用“;”表示的东西between options 对我不起作用(脚本尝试将其作为命令执行)
有什么想法吗?
【问题讨论】:
-
举一些你想要什么和不想要什么的例子......
-
我只想在 EOF 语句中使用本地定义的变量,但我尝试的一切都对我不起作用。如果我想在远程服务器上回显变量,我没有得到任何结果 -> 所以脚本不会发送它。
-
将您的 mysql 语句添加到您的问题中。
-
顺便说一句——如果这个值来自一个不受信任的来源,虽然我的答案是安全的,但它不会对 SQL 注入风险做任何事情。 (我没有在回答中引用实际的 mysql 命令,因为我不想做任何表现出不良做法的事情)。您可能会研究是否有办法通过命令行将字符串作为绑定变量传递——我曾经构建了一个可以做到这一点的 PostgreSQL 客户端,回到过去;我希望在 MySQL 中也能做到这一点。
标签: bash ssh remote-access heredoc