Perl 系统命令 returns "mkdir /tmp/test.xxxxx: No such file or directory"

Perl system command returns "mkdir /tmp/test.xxxxx: No such file or directory"

我正在尝试使用 Perl 系统命令通过 ssh 连接到另一台服务器和 运行 mkdir 命令,但它总是 returns

mkdir /tmp/test.xxxxx: No such file or directory

而如果我手动 ssh 和 运行 相同的命令它工作正常。这是我写的代码:

my $TEMPDIR = '/tmp/test.xxxxx';
system "$SSH $SSH_USER\@$TESTSVR \"mkdir $TEMPDIR\""  or die " $!\n";

system 不会 return 错误。并且 $! 不一定设置为错误,具体取决于您所说的错误。

system(...);
die "Can't launch child: $!\n" if $? == -1;
die "Child killed by signal ".( $? & 0x7F )."\n" if $? & 0x7F;
die "Child exited with error ".( $? >> 8 )."\n" if  $? >> 8;

值得注意的是,您有多个代码注入错误,可以使用以下方法轻松修复:

system($SSH, "$SSH_USER\@$TESTSVR", "mkdir", $TEMPDIR)

考虑使用 Net::OpenSSH

它将为您处理一些小细节(例如,引用或检查远程命令是否以非零值退出):

use Net::OpenSSH;

my $ssh = Net::OpenSSH->new($TESTSVR, user => $SSH_USER);
$ssh->system(mkdir => $TEMPDIR)
    or die "Can't create remote dir: " . $ssh->error;