我有本地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
文件为空
答案 0 :(得分:1)
远程服务器不知道您的局部变量,您只能在ssh行中使用额外的参数将变量的值从局部传递到远程:
ssh remoteuse@ip "/bin/bash remote_script.sh $variable"
答案 1 :(得分:0)
您必须将变量添加到已执行命令的环境中。可以使用var=value cmd
syntax完成。
但是由于传递给ssh
的行将在远程服务器上进行评估,因此您必须确保该变量采用格式,可以用作外壳程序输入。根据您的bash
版本,有两种方法可供考虑:
对于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" *>
如果没有bash 4.4
或更高版本,可以对%q
使用printf
指令:
ssh remoteuse@ip "foo=$(printf '%q' "$foo") /bin/bash remote.sh"