我有一个构建动态命令字符串(调用 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');
但得到相同的结果。帮助?