gpt4 book ai didi

Perl Rover v3 将环境变量传递到规则集中

转载 作者:行者123 更新时间:2023-12-04 04:26:30 27 4
gpt4 key购买 nike

我正在使用 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/

最佳答案

在查看了我从未使用过的 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 核心扩展 -> 核心扩展
[rulesets]

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


[hosts]

localhost:{
os linux
username mdupont
description 'localhost'
ftp_methods sftp
ftp_method_used sftp };

麦克风

关于Perl Rover v3 将环境变量传递到规则集中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11874782/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com