1

我正在将我现有的脚本之一移植到 perl 中,并且在执行系统命令(特别是 lftp)时遇到了一些困难。这是我在 bash 中的做法:

重击:

lftp -u $ftpusername,$ftppass -e open $hostname << EOF
      set ftp:ssl-allow no
      set mirror:use-pget-n 5
      glob -a rm -r "${remote_dir}/file.php"
EOF

所以我想知道如何在 Perl 中执行这个完全相同的命令。这是我尝试过的无济于事:

珀尔:

system("lftp -u $ftpuser,$pass -e open $hostname
            set ftp:ssl-allow no
            set mirror:use-pget-n 5
            glob -a rm -r 'remote_dir/db-import.php'"
      );

任何帮助将不胜感激,谢谢!

4

1 回答 1

2

perl:提供已执行命令的标准输入

您可以使用open打开管道来执行程序 ( lftp) 输入。

open( my $LFTP,'|-', "lftp -u $ftpuser,$pass -e open $hostname" ) 
  or die "Cannot open lftp: $!";
print $LFTP <<"END";
set ftp:ssl-allow no
set mirror:use-pget-n 5
glob -a rm -r 'remote_dir/db-import.php'
END
close($LFTP) or die; # die unless lftp exit code is 0

替代方法:使用类似模块IPC::Run允许检查执行的命令回复。

于 2014-01-28T00:35:01.100 回答