9

私はperlRoverモジュールバージョン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

使用したことのないローバーのソース コードを確認したところ、既存のコードでは不可能であることがわかりました。

~ および ${HOME} 構文をサポートする新しい拡張機能を作成しました (これらは bash 拡張機能であり、OS の一部ではないため、perl はそれらをサポートしていません)。

コードはこちら: https://github.com/h4ck3rm1k3/perl-rover/commit/2c78aefb97e819956bb665b04056763f8df1b242

以前にローバーを使用したことがなく、ローバーが 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
 };

update2

名前を引用符で囲んだり、引数の間にコンマを使用したりしないでください。

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 ディレクトリに追加します:

CoreVariables.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 の Web サイトです: http://sourceforge.net/projects/rover/

于 2013-03-28T00:16:30.940 に答える