0

我有一个类似于以下代码的用例。需要将参数化变量/标识符从 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/' 

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

4

1 回答 1

1

只需从第一个中删除引号ENDSSH

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

根据bash手册:

这里的文件

[...]

这里文档的格式是:

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

不会对word执行参数和变量扩展、命令替换、算术扩展或路径名扩展。 如果word的任何部分 被引用,则分隔符是word上的引号删除的结果,并且 here-document 中的行不展开。 如果 word 不被引用,则 here-document 的所有行都经过参数扩展、命令替换和算术扩展,字符序列 \<newline> 被忽略,并且\必须用于引用字符\$`

[...]

于 2017-07-07T10:14:13.463 回答