bash如何将变量传递到远程bash脚本

时间:2018-08-21 10:46:37

标签: bash

我有本地bash脚本,该脚本用于在远程服务器中调用bash脚本并从远程服务器获取一些报告。

我目前在local_script.sh中调用此脚本的方式是:

ssh remoteuse@ip "/bin/bash remote_script.sh"

现在,我想在local_script.sh文件中设置一个日期变量,并且该变量也需要在remote_script.sh文件中可用。

请提出一些想法。

编辑

请参阅我的测试脚本:

[user@localserver]$ ssh remoteusr@ip "/bin/bash remote_script.sh $test_var"

还有我的远程脚本:

[user@remoteserver]$ cat remote_script.sh
#!/bin/bash
echo $test_var > test_var.log

但是运行脚本后,远程服务器上的test_var.log文件为空

2 个答案:

答案 0 :(得分:1)

远程服务器不知道您的局部变量,您只能在ssh行中使用额外的参数将变量的值从局部传递到远程:

ssh remoteuse@ip "/bin/bash remote_script.sh $variable"

答案 1 :(得分:0)

您必须将变量添加到已执行命令的环境中。可以使用var=value cmd syntax完成。

但是由于传递给ssh的行将在远程服务器上进行评估,因此您必须确保该变量采用格式,可以用作外壳程序输入。根据您的bash版本,有两种方法可供考虑:

  1. 对于bash 4.4或更高版本,您可以在${parameter@operator}中使用Q运算符:

    本地脚本:

    foo="abc'def  \"123\"  *"
    ssh remoteuse@ip "foo=${foo@Q} /bin/bash remote.sh"
    

    远程脚本:

    printf '<%s>\n' "$foo"
    

    输出:

    $ ./local_script.sh
    <abc'def  "123"  *>
    
  2. 如果没有bash 4.4或更高版本,可以对%q使用printf指令:

    ssh remoteuse@ip "foo=$(printf '%q' "$foo") /bin/bash remote.sh"