Perl Rover v3将环境变量传递给Rulesets

sfg*_*ups 9 perl expect

我使用perl Rover模块版本3登录Linux/Unix服务器并运行脚本.在规则集中,如果我添加完整路径名,则会将脚本复制到远程服务器,而无法替换环境变量.

例如.这有效:

 copy:{
       put_file "/home/u1/find.sh" "/tmp/"
        }; 
Run Code Online (Sandbox Code Playgroud)

这不起作用:

copy:{
   put_file "$HOME/find.sh" "/tmp/"
    };
Run Code Online (Sandbox Code Playgroud)

使用$ ENV {'HOME'},这也行不通.

我怎样才能传递环境变量?

流动站模块文件. http://rover.sourceforge.net/QuickStart/Rover-QuickStart-3.html#ss3.2

http://rover.sourceforge.net/

h4c*_*1k3 4

在查看了我从未使用过的流动站的源代码后,我确定从现有代码中这是不可能的。

我为你创建了一个新的扩展,它具有该功能,它支持 ~ 和 ${HOME} 语法(它们是 bash 扩展,而不是操作系统直接的一部分,这就是 perl 不支持它们的原因)。

代码在这里: https: //github.com/h4ck3rm1k3/perl-rover/commit/2c78aefb97e819956bb665b04056763f8df1b242

我很难测试它,因为我以前从未使用过rover ,而且rover似乎不支持scp。(我读到它是受支持的,但还无法测试它。)无论如何,如果您喜欢它,请告诉我。如果有合理的要求,我会投入更多的工作。

更新

这是我的示例规则集:

示例规则集

[rulesets]
test:
{
       put_file_from_home put_file "~/find2.sh" "/tmp/"
       put_file_from_home put_file "${HOME}/find3.sh" "/tmp/"

},  ;
Run Code Online (Sandbox Code Playgroud)

示例输出

这是示例输出,我无法让流动站工作。请参阅下面的测试用例。

测试输出

perl -I lib  t/example2.t
Local was ~/find2.sh and home was /home/mdupont at lib/Rover/CoreExtension.pm line 19.
Local now /home/mdupont/find2.sh at lib/Rover/CoreExtension.pm line 22.
Local was ${HOME}/find3.sh and home was /home/mdupont at lib/Rover/CoreExtension.pm line 19.
Local now /home/mdupont/find3.sh at lib//Rover/CoreExtension.pm line 22.
Run Code Online (Sandbox Code Playgroud)

新 sshport 选项的新配置选项

[hosts]
someexample:{
    os linux
    username myusername
    description 'myhost'
    sshport 12345
    ftp_method_used sftp
 };
Run Code Online (Sandbox Code Playgroud)

更新2

不要在名称周围使用引号,在参数之间使用逗号,

到 git@github.com:h4ck3rm1k3/perl-rover.git 2207417..7637741 CoreExtension -> CoreExtension

[rulesets]

test: {     put_file_from_home ~/find2.sh,/tmp/ }, ;


[hosts]

localhost:{
    os linux
    username mdupont
    description 'localhost'
    ftp_methods sftp 
    ftp_method_used sftp  };
Run Code Online (Sandbox Code Playgroud)

麦克风