grep отлично работает в командной строке, но ничего не возвращает в скрипте

Я пытаюсь написать небольшой скрипт, чтобы получить список файлов, соответствующих определенным критериям, в файл.

#!/bin/sh cd /var/www_data/patch/ grep --include=\*.{php,ini,conf,sh} -ril -P "'([\d\w\-\_\.]+)(@domain.com)'" "/var/www_data/something/" 2>&1 > mails 

Линия grep отлично работает в командной строке, но если я запустил ее через скрипт, итоговый файл будет иметь размер 0 байт. Есть идеи, почему это происходит?

  • Передача значений в скрипт
  • Скрипт для распознавания жестких дисков и запуск Smartctl
  • Экран не может выполнить «Myscript.sh»: нет такого файла или каталога
  • Создать переменную на основе порядка, в котором файл находится в алфавитном списке файлов
  • Обнаружение и удаление пустых каталогов из списка
  • Как узнать общие элементы между двумя файлами?
  • Какова цель тестирования $ DISPLAY с помощью ?
  • В чем разница между / bin и ~ / bin?
  • Расширение имени файла с диапазонов дат
  • sudo (cd / some / dir; ./runscript.sh) не работает
  • Список запросов серверов для выделенной памяти / процессора
  • Как напечатать дефисы, если переменная пуста?
  • 2 Solutions collect form web for “grep отлично работает в командной строке, но ничего не возвращает в скрипте”

    Нашел свою ошибку. Предполагалось, что это будет #!/bin/bash . Благодаря @steeldriver для наконечника

    Чтобы включить расширение оболочки внутри скрипта, вам нужно передать параметр командной строки в bash, это можно сделать в самом скрипте:

     #! /bin/bash set -B #enables expansion set -X #enables debugging 

    При первом варианте все будет передано оболочке, как если бы оно было написано в командной строке, второй вариант будет генерировать много результатов, что очень полезно, чтобы увидеть, что происходит, но вы, конечно же, хотите отключить его, как только ваш скрипт работает правильно ,

    Linux и Unix - лучшая ОС в мире.