Existem alguns problemas aqui:
-
O loop
while
não está lendo nenhuma entrada. O formato correto éwhile read line; do ... ; done < input file
Ou
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. Comoread
trava, o "OR" nunca é alcançado. Eu não entendo o que você queria fazer de qualquer maneira. Se você quiser pesquisar por$line
se$line
estiver 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 fi
Aqui, se
$line
nã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