我正在将我现有的一个脚本移植到perl中,并在执行系统命令(特别是LFTP)方面遇到了一些困难。这是我在bash中做到的:
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'"
);
任何帮助将不胜感激,谢谢!
perl:执行命令的feed 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
的模块允许检查执行的命令答复。