я пытаюсь выполнить команду grep внутри php shell_exec. И это работает хорошо, кроме того, что не получается, когда у меня есть подчеркивание в поисковом слове. Я не могу понять, почему это не удается из-за подчеркивания, поскольку команда grep с подчеркиванием в поисковом слове работает в коде оболочки ниже:
$output = shell_exec("grep -l -r '$search_word'");
Содержимое в переменной search_word является динамическим из базы данных, но слово, которое доставляет мне неприятности, — base_64
Попробуйте вот так:
$ output = shell_exec («grep -l -r ‘$ search_word’ ./*»);
Прежде чем PHP создаст подпроцесс, ваша команда будет $search_word
оценивали:
grep -l -r '....'
# So in $search_word is set to `john doe` it will become:
grep -l -r 'john doe'
Как ведет себя PHP Я не уверен, возможно, он застопорился в ожидании завершения процесса, возможно, он уже закрывал стандартный ввод.
Ваша команда ожидает ввода от stdin, потому что имя файла не указано, разбивка:
grep [опция] … [шаблон] [файл] …
-Я буду печатать только имя файла соответствующего файла
-рекурсивный поиск.
TLDR: Вы правильно хотите указать файл / каталог для поиска:
$output = shell_exec("grep -l -r '$search_word' .");
// Or maybe
$output = shell_exec("grep -l -r '${search}_word' ."); # will use $search variable as an input from PHP while _word is a string now.