У меня есть php-скрипт, который создает динамическую командную строку (вызывает perl-скрипт), а затем выполняет команду, например:
$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» и возникает ошибка, что строка не завершена. Но если я выведу на экран $cmd_string_r и выполню его через командную строку или скопирую/вставлю в переменную $cmd_string, он будет выполнен правильно. Я в тупике. Как я могу убедиться, что эти аргументы передаются правильно? Я пробовал это:
$output = shell_exec('export PERL5LIB=/mnt/path/to/custom:$PERL5LIB && ' . escapeshellcmd($cmd_string) . ' 2>&1');
но получить тот же результат. Помощь?