mkdir не работает через ssh

Я разрабатываю скрипт для перехода на сервер и копирования файлов на сервере с помощью perl через ssh. Я вхожу на удаленный сервер, а затем выполняю:

*my ($stdout,$stderr,$exit) = $ssh->cmd("mkdir $destFolder" && "exit");*

но mkdir работает только в том случае, если после него нет команды (я пытаюсь использовать код тентера здесь, используя несколько команд в одном сеансе, используя &&)

спасибо. вот мой код.

#######################################################################
# Perl Module Included 
#######################################################################
$|=1;

use warnings;
use Net::SSH::Perl;
use Net::SSH::Expect;

#######################################################################
# quit unless we have the correct number of command-line args
#######################################################################

$num_args = $#ARGV + 1;
if ($num_args != 4) {
  print "\nNOT ENOUGH ARGUEMENTS!\n";
  print "\nUSAGE:\nperl perl.pl yearMonthDay startTime endTime enodeB\n";
  print "\nFOR EXAMPLE:\nperl perl.pl 20130806 1530 1545 001007_eNB \n";
  exit;
}

#######################################################################
# saving the arguments for future use .
#######################################################################

$date=$ARGV[0];
$startTime=$ARGV[1];
$endTime =$ARGV[2];
$enb =$ARGV[3];

#######################################################################
# Intializing username , password and IP
#######################################################################

my $user = 'ejadeln';
my $pass = 'ejadeln2@';
my $ip = '10.118.124.21';


#######################################################################
# Intializing logPath , fileName and hostPath
#######################################################################

my $path = "/var/opt/ericsson/nms_umts_pms_seg/segment1/XML/SubNetwork=ONRM_ROOT_MO_R/MeContext="."$enb/";
my $endTime_t = $endTime;
my $host = "/home/$user";
my $destId = "$enb.$date.$startTime";
my $destFolder = "/home/$user/"."$destId";
print "$destFolder\n";


for ($i = 0 ; $startTime < $endTime_t ; $i++)
{
    $endTime = $startTime + 15;
    $ofEndTime = substr($endTime, -2);

        if ($ofEndTime >= 60) {
            $endTime = $endTime - $ofEndTime + 100; 
        }

    our $file = "A"."$date."."$startTime"."-0400-$endTime-0400_SubNetwork=ONRM_ROOT_M'O,MeContext="."$enb"."_eNB_statsfile.xml";

    $startTime = $startTime + 15;
    $ofStartTime = substr($startTime, -2);
        if ($ofStartTime >= 60) {
            $startTime = $startTime - $ofStartTime + 100; 
        }

}
#######################################################################
# using ssh commands to log in into remote server 
#######################################################################

my $ssh = Net::SSH::Perl->new($ip);

$ssh->login("$user","$pass");

#######################################################################
# Implementing copy commands on remote server using SSH 
#######################################################################

my ($stdout,$stderr,$exit) = $ssh->cmd("mkdir $destFolder" && "exit");


$fileNum = $i+1;
print "$fileNum file copied\n";

person Atif Malik    schedule 09.07.2013    source источник


Ответы (2)


Я считаю, что вы хотели сделать

$ssh->cmd("mkdir $destFolder && exit");

"mkdir $destFolder && exit" возвращает строку mkdir /foo/bar && exit

"mkdir $destFolder" && "exit" возвращает строку exit (поскольку левая часть && всегда верна).

Но это тоже глючит. Подумайте, что произойдет, если $destFolder содержит пробел или &. Должен быть:

use String::ShellQuote qw( shell_quote );
$ssh->cmd('mkdir '.shell_quote($destFolder).' && exit');
person ikegami    schedule 09.07.2013

Если вашим единственным требованием является доступ к файловой системе, вы можете использовать SFTP:

use Net::SFTP::Foreign;

my $sftp = Net::SFTP::Foreign->new($ip,
                                   user => $user,
                                   password => $pass,
                                   autodie => 1);
$sftp->mkdir($destFolder);
person salva    schedule 10.07.2013