【问题标题】:How to copy a files from host to a created directory?如何将文件从主机复制到创建的目录?
【发布时间】:2015-03-18 17:44:51
【问题描述】:

我正在尝试将文件从主机复制到创建的目录。这是我的脚本:

use strict;
use Getopt::Long;
use Net::SCP::Expect;

my $filename;
GetOptions(
    "file=s" => \$filename
);
my $src_path="/";
my $directory;
open(INBOX, "<$filename") or die "Can't open $filename\n";

while(<INBOX>) {
    chomp;
    my @arr = split(/:/);
    my $host=$arr[0];
    my $username=$arr[1];
    my $password=$arr[2];

    sub main {
        my $directory = "temp";
        unless(-e $directory or mkdir $directory) {
            die "Unable to create $directory";
        }
    }

    main();
    print "Copying from $host \n";
    my $scpe = Net::SCP::Expect->new(
        host     => $host,
        user     => $username,
        password => $password,
    );
    $scpe->scp($host . ":" . $src_path, $directory);

但是在这里我无法将文件从主机移动或复制到创建的名为 temp 的目录。你能在 Perl 这方面帮助我吗?

【问题讨论】:

  • 运行程序时会发生什么?您收到任何错误消息吗?
  • 如您所见,我试图改进您答案的格式。似乎这只是代码的一部分,或者在它的末尾缺少一个右花括号}。尽量保持代码正确缩进,因为您很容易看到错误。使用可以使用perltidy,它将安全、自动地漂亮地格式化您的代码。
  • 你检查过scp函数返回的错误码吗?

标签: perl scp


【解决方案1】:

你在这里用范围做奇怪的事情:

在你的子目录中——这很奇怪——被称为“main”,你声明了一个locally scoped变量 $directory 并为它分配了“temp”。

然而,在第 10 行主程序中声明的变量 $directory 保持为空 - 但这是 scp 中使用的变量。

建议改一下

sub main {
    my $directory = "temp";
    unless(-e $directory or mkdir $directory) {
        die "Unable to create $directory";
    }
}
main();

进入那个:

$directory = "temp";
unless(-e $directory or mkdir $directory) {
    die "Unable to create $directory";
}

【讨论】:

    猜你喜欢
    • 2015-03-25
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 2016-01-27
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多