我正在将一个现有脚本移植到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中执行这个完全相同的命令。以下是我尝试过的,但没有结果的:
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'"
);任何帮助都将不胜感激,谢谢!
发布于 2014-01-28 00:35:01
perl:输入已执行命令的stdin
您可以使用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这样的模块可以检查已执行的命令答复。
https://stackoverflow.com/questions/21393469
复制相似问题