Existem alguns problemas aqui:
-
O loop
whilenão está lendo nenhuma entrada. O formato correto éwhile read line; do ... ; done < input fileOu
some other command | while read ...Seu loop está, portanto, pendurado, aguardando a entrada. Você pode testar isso executando seu script e, em seguida, digitando qualquer coisa e pressionando enter (aqui, digitei
foo):$ foo.sh Performing grep searches.. foo Searching for foo..Você pode melhorar isso adicionando uma solicitação ao seu
read:while IFS='' read -p "Enter a search pattern: " -r line ...Isso ainda será executado até que você pare com Ctrl + C .
-
O
|| [[ -n "$line" ]](que significa "OU a variável $ linha não está vazia") nunca é executado. Comoreadtrava, o "OR" nunca é alcançado. Eu não entendo o que você queria fazer de qualquer maneira. Se você quiser pesquisar por$linese$lineestiver definido e usarread, se não estiver, você precisará de algo como:if [[ -n "$line" ]]; then grep -r "$line" --exclude-dir=grep_results > ./grep_results/"$line"_infile.txt else while IFS='' read -p "Enter a search pattern: " -r line || [[ -n "$line" ]]; do grep -r "$line" --exclude-dir=grep_results > ./grep_results/"$line"_infile.txt done fiAqui, se
$linenão estiver definido, você ainda precisará inseri-lo manualmente. Uma abordagem mais limpa seria alimentar um arquivo no loopwhile:while IFS='' read -r line || [[ -n "$line" ]]; do grep -r "$line" --exclude-dir=grep_results > ./grep_results/"$line"_infile.txt done < list_of_patterns.txt