将多个变量从本地bash传递到远程bash脚本而不会吞噬

时间:2016-06-20 20:36:34

标签: linux bash shell

我无法将多个变量发送到远程bash脚本而不会发生吞噬。

为了这个问题,变量$ timestamp包含12-12-15 19:45:21

ssh user@serverip "/usr/path/to/script.sh http://www.web.com/$1 http://web.com/$2 $timestamp";

我将3个变量发送到script.sh

两个带有修改后文件名的URL,最后是变量形式,然后是我的$ timestamp变量

但是在myscript.sh上,当我尝试将$ timestamp插入到mysql数据库中时,它只看到白色空间前的第一部分日期:

12-12-15   

因此我对命令的引用并不能防止狼吞虎咽。我是否需要单独引用每个变量?

3 个答案:

答案 0 :(得分:1)

ssh user@serverip "/usr/path/to/script.sh http://www.web.com/$1 http://web.com/$2 $timestamp";

这相当于本地调用

/usr/path/to/script.sh http://www.web.com/$1 http://web.com/$2 $timestamp

尝试引用传递的每个参数

ssh user@serverip "/usr/path/to/script.sh 'http://www.web.com/$1' 'http://web.com/$2' '$timestamp'";

您还可以在脚本中打印每个参数,以查看正在传递的内容...例如echo $1等等。

答案 1 :(得分:0)

您可以尝试类似

的内容
{{1}}

答案 2 :(得分:0)

您需要转义远程主机的值。这样做的正确方法是printf %q

ssh user@serverip "/usr/path/to/script.sh \
    $(printf "%q " "http://www.web.com/$1" "http://web.com/$2" "$timestamp")"

这适用于所有变量值。将它们用单引号括起来会在变量本身包含单引号时导致语法错误和命令注入。