Здесь есть несколько проблем:
Цикл while
не считывает ввод. Правильный формат -
при чтении строки; делать ... ; done <входной файл
Или
какая-то другая команда | при чтении ...
Ваш цикл зависает, ожидая ввода. Вы можете проверить это, запустив свой скрипт, а затем набрав что-нибудь и нажав Enter (здесь я ввел foo
):
$ foo.sh
Выполнение поиска с помощью grep .. {{1} } foo
Поиск foo ..
Вы можете улучшить это, добавив подсказку к вашему read
:
while IFS = '' read -p " Введите шаблон поиска: "-r строка ...
Он будет работать, пока вы не остановите его с помощью Ctrl + C .
|| [[-n «$ line»]]
(что означает «ИЛИ переменная $ line не пуста») никогда не выполняется. Поскольку чтение
зависает, «ИЛИ» никогда не достигается. Я все равно не понимаю, что вы хотели. Если вы хотите найти $ line
, если определена $ line
, и использовать read
, если это не так, вам понадобится что-то вроде:
if [[-n "$ линия"]]; затем
grep -r "$ line" --exclude-dir = grep_results> ./grep_results/"$line"_infile.txt
else
, а IFS = '' read - p "Введите шаблон поиска:" -r строка || [[-n "$ линия"]]; сделать
grep -r "$ line" --exclude-dir = grep_results> ./grep_results/"$line"_infile.txt
done
fi
Здесь, если $ line
не определена, вам все равно нужно ввести ее вручную. Более чистый подход - либо передать файл в цикл while
:
while IFS = '' read -r line || [[-n "$ линия"]]; выполните
grep -r "$ line" --exclude-dir = grep_results> ./grep_results/"$line"_infile.txt
done