当我在终端中运行它时,它可以正常工作
/usr/bin/sftp -o "IdentityFile=/opt/apps/doc/bin/id_rsa" -b /opt/apps/doc/bin/batch.txt DMS2@convpc1
但是,当我在perl脚本中运行它时,没有任何反应
system("/usr/bin/sftp -o \"IdentityFile=/opt/apps/doc/bin/id_rsa\" -b /opt/apps/doc/bin/batch.txt DMS2@convpc1");
我花了一整天的时间试图找出如何sftps我的文件,我无法弄清楚这个问题?有什么建议吗?
编辑:我做了一些测试。我将整个命令放在test.sh文件中。我从终端运行test.sh,它的工作原理。我更改了perl文件,因此它是system(" /opt/app/doc/bin/test.sh")然后运行它,没有任何反应。我在系统命令之前添加了打印语句,它们可以工作,但系统命令仍然无法工作,因为我没有看到我的文件被移动。
答案 0 :(得分:3)
系统命令可能正在吃引号字符,'@'字符需要转义为\ @。
尝试此操作以查看您是否真正运行了您尝试运行的命令:
my $cmd = "/usr/bin/sftp -o \"IdentityFile=/opt/apps/doc/bin/id_rsa\" -b /opt/apps/doc/bin/batch.txt DMS2@convpc1";
sys($cmd);
sub sys {
my ($cmd) = @_;
print "About to run '$cmd'\n";
(system($cmd) == 0) or die "Unable to run '$cmd' : $!";
}