Если вы создадите простой php-скрипт с этим кодом:
shell_exec('"');
И запустите его с помощью:
php myscript.php
Это дает следующую ошибку в bash на моем Mac:
sh: -c: line 0: unexpected EOF while looking for matching `"'
sh: -c: line 1: syntax error: unexpected end of file
Я пробовал все, что мог придумать:
ob_start();
@shell_exec('"');
ob_end_clean();
@shell_exec('" 2> /dev/null');
Но что бы я ни пытался, я не могу подавить сообщение. Проблема в том, что я создаю модульный тест для стресс-тестирования $argc, $argv и команды getopt() для инструмента общего назначения, и мне нужно вызывать скрипт сотни раз с различными входными данными, содержащими случайные символы, такие как '" =: и т. д.
Поэтому мне нужно иметь возможность либо подавить вывод ошибки, либо обнаружить несбалансированные кавычки и добавить ' или " в конец строки. Я нашел это регулярное выражение для обнаружения строк с одинарными и двойными кавычками:
PHP: регулярное выражение для игнорирования экранированных кавычек внутри кавычек
Но у меня возникли проблемы с визуализацией того, как это сделать для общей команды bash, которая имеет сочетание аргументов в кавычках и без кавычек. Есть ли встроенная команда, которая сообщит мне, приемлема ли строка, не выдавая ошибки? Затем я мог бы попробовать добавить либо "'", либо ""', и я вполне уверен, что один из них закроет строку. На данный момент меня интересует только предотвращение сообщения об ошибке, потому что я просто бросаю случайный ввод в сценарий на данный момент.
Спасибо!
escapeshellarg
? - person Gumbo   schedule 26.03.2013