У меня есть сценарий, который устанавливает соединение с удаленным сервером с помощью Perl модуля Net::OpenSSH
и передает файлы с локального сервера на удаленный компьютер. Это прекрасно работает.
...
my $ssh = ConnectToServer( $host, $user, $password );
my $remote_dir = "/home/shared/some/path/"
if ( $ssh->system('mkdir', '-p', $remote_dir) ) {
print "Directory $remote_dir created!\n";
} else {
print "Can't create $remote_dir on $host : ".$ssh->error."\n";
}
$ssh->scp_put({glob => 1}, "/home/shared/Test_Vinod/LOG/*.zip", $remote_dir)
or die "scp failed: " . $ssh->error;
undef $ssh;
sub ConnectToServer {
my ( $host, $user, $passwd ) = @_;
my $ssh = Net::OpenSSH->new($host,
user => $user,
password => $passwd,
master_opts => [-o => "StrictHostKeyChecking=no"]
);
$ssh->error and die "Couldn't establish SSH connection: ". $ssh->error;
return $ssh;
}
Но всякий раз, когда я выполняю этот скрипт, я получаю сообщение:
Directory /home/shared/some/path/ created!
Мое понимание в строке if ($ssh->system('mkdir', '-p', $remote_dir)) {
:
If $remote_dir
не существует, создайте его рекурсивно на удаленной машине.
Но как значение $ssh->system('mkdir', '-p', $remote_dir)
становится 1
, даже если каталог уже существует.
Может быть, меня сбивает с толку флаг -p
. Комментарии экспертов ожидаются. Спасибо.