0

我有一个构建动态命令字符串(调用 perl 脚本)的 php 脚本,然后执行命令,如下所示:

    $cmd_string = "perl $pushFile";
    foreach($cmd_args AS $argName => $arg){
        $cmd_string .= ' --' . $argName . '="' . $arg . '"';
    }
    $output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB  && ' . $cmd_string . ' 2>&1');

我遇到了一些我认为是由一些参数的插值引起的失败。例如参数之一是'246+8GT>-',它变成'246 8GT'并且字符串未终止的错误。但是,如果我将 print_r $cmd_string 打印到屏幕并通过命令行执行它,或者将其复制/粘贴到 $cmd_string 变量中,它会正确执行。我难住了。如何确保正确传递这些参数?我试过这个:

    $output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB  && ' . escapeshellcmd($cmd_string) . ' 2>&1');

但得到相同的结果。帮助?

4

1 回答 1

0

构建后,您正在转义命令字符串。

尝试这个:

$cmd_string = "perl $pushFile";
foreach($cmd_args AS $argName => $arg){
    $cmd_string .= ' --' . $argName . '="' . escapeshellarg($arg) . '"';
}
$output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB  && ' . $cmd_string . ' 2>&1');
于 2013-11-01T15:36:17.353 回答