在perl中运行linux sftp命令不起作用

时间:2015-07-14 20:43:13

标签: linux perl sftp

当我在终端中运行它时,它可以正常工作

/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")然后运行它,没有任何反应。我在系统命令之前添加了打印语句,它们可以工作,但系统命令仍然无法工作,因为我没有看到我的文件被移动。

1 个答案:

答案 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' : $!";
}