У меня есть простой текстовый файл, который я отслеживаю для изменения, используя скрипт BASH.Текст, который я ищу, может начинаться с начала строки или смещаться на пробелы.Мой поиск довольно прост;
#!/bin/bash
value=`/bin/grep "^\s*mystring:" mytextfile`
echo "found: [$value]" >> myoutput.log
Это прекрасно работает при запуске из командной строки, но не работает, если вызывается из скрипта, настроенного в crontab.У меня есть обходной путь для моей проблемы, но я все еще не могу объяснить, почему одновременное использование символов вставки (^) и пробела (\ s *) при вызове grep из crontab?
Изменение PATH и среды не кажетсяиметь какое-либо влияние.Любые идеи?
... спасибо за комментарии!
- путь к grep был последовательным
- то же самоеСценарий вызывался из командной строки, как было настроено в crontab
Решением было использование синтаксиса;
value=`/bin/grep -E '^[[:space:]]*mystring:' myfile`
Необходима комбинация из 3 вещей;
- одинарные кавычки при использовании регулярного выражения
- grep -E! Расширенное регулярное выражение
- [[: space:]] вместо \ s для пробела
Я до сих пор не уверен, почему [[: space:]] работал, когда \ s не в crontab, когда он работает в интерактивном режиме.