使用sshpass在shellscript中导出参数化变量

时间:2017-07-07 08:00:43

标签: shell variables parameterized sshpass

我有一个类似下面代码的用例。需要从shell脚本将参数化变量/标识符导出到远程shell脚本。我使用下面的代码,但我无法导出值。请建议如何做。

A.sh(脚本1)

#!/bin/bash
sshpass -p asdf ssh rock@host.com<<'ENDSSH'
export directory="$1"
sh /../B.sh
ENDSSH

B.sh(脚本2)

#!/bin/bash
echo directory=$directory
mkdir $directory

#Execution
sh A.sh '/data/2017-7-7/' 

#output
directory=

当我对值进行硬编码时,我在远程shell脚本中获取了值。

export directory='/data/2017-7-7/' 

我想导出参数化变量,请建议如何实现。谢谢

1 个答案:

答案 0 :(得分:1)

只需删除第一个ENDSSH

中的引号即可
sshpass -p asdf ssh rock@host.com << ENDSSH
export directory="$1"
sh /../B.sh
ENDSSH

根据bash手册:

  

此处文件

     

[...]

     

here-documents的格式为:

[n]<<[-]word
    here-document
delimiter
     

无参数和变量扩展,命令替换,算术   扩展或路径名扩展在 word 上执行。 如果有的话    word 被引用,分隔符 word 上引用删除的结果,   并且不会展开here-document中的行。如果 word 是   如果没有引用,here-document的所有行都会受到参数的影响   扩展,命令替换和算术扩展,角色   序列\<newline>被忽略,\必须用来引用   字符\$`

     

[...]