9

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

例如。这有效:

 copy:{
       put_file "/home/u1/find.sh" "/tmp/"
        }; 

这没有用:

copy:{
   put_file "$HOME/find.sh" "/tmp/"
    };

使用 $ENV{'HOME'},这也没有用。

如何传递环境变量?

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

http://rover.sourceforge.net/

4

2 回答 2

4

在查看了我从未使用过的 rover 的源代码后,我确定现有代码不可能。

我为您创建了一个具有该功能的新扩展,它支持 ~ 和 ${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/"

},  ;

示例输出

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

测试输出

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.

新 sshport 选项的新配置选项

[hosts]
someexample:{
    os linux
    username myusername
    description 'myhost'
    sshport 12345
    ftp_method_used sftp
 };

更新2

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

到 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  };

麦克风

于 2012-08-15T06:20:32.763 回答
0

老问题但新答案,因为您使用 Rover v3,您可以通过重载来扩展 Rover::Core 模块。

将此添加到您的 ~/.rover/contrib 目录:

核心变量.pm:

package CoreVariables;

use strict;
use Exporter;
our @ISA = qw( Exporter );
our @EXPORT = qw( put_file );

sub put_file {
  my ($self, $host, $command) = @_;

  $command =~ s/(\$[\w{}]+)/$1/eeg;
  return Rover::Core::put_file($self, $host, $command);
}

并将以下内容添加到您的 ~/.rover/config [modules] 部分(必须在 Rover::Core 之后):

CoreVariables:{
};

然后您可以在使用 put_file 时将环境变量存储在您的流动站配置中。如果您愿意,可以添加其他例程,这只会扩展 put_file。

由于这是一项如此简单的任务,我会将其添加到请求的功能列表中,并将其包含在下一个版本中(我是 Rover 的作者)。

向 Rover 提问的更好的地方当然是在 sourceforge 网站上:http: //sourceforge.net/projects/rover/

于 2013-03-28T00:16:30.940 回答