Tente a seguinte alteração:
#!/bin/bash
LOOK_FOR="NTLMAuthenticationFilter"
find ./ -name "*.jar" -print | while read -r FILE
do
echo "Looking in ${FILE} ..."
grepjar -e "${LOOK_FOR}" "${FILE}" 2>/dev/null >/dev/null
RETCODE=${?}
if [ ${RETCODE} -eq 0 ]; then
echo "Found ${LOOK_FOR} in ${FILE}"
fi
done
A variável ? armazena o valor de retorno do último comando. Isso normalmente será 0 para sucesso e qualquer outro valor para falha.
Você também notará que eu coloquei o comando for em um comando while . Isso permite um conjunto maior de resultados retornados.
Quebrando esse comando find ./ -name "*.jar" -print | while read -r FILE :
find ./ - iniciando no diretório atual ...
-name "*.jar" - localizar arquivos terminados em .jar ...
-print - e imprimir seus nomes em | - redirecionar essa saída para o próximo comando
while read -r FILE - e enquanto houver saída do comando anterior, atribua-a à variável FILE e execute os comandos entre do e done .
Em outras palavras, ele pega a saída do comando find (a lista de arquivos terminando em jar ) e executa o bloco de código no loop. Para uma lista curta, ela se comporta exatamente como sua versão usando o loop for i in . A vantagem é que ele suporta listas longas, já que há um limite superior para o que você pode passar na linha de comando, como você fazia com o loop for i in .
Editar: Alterado para o script bash, mudou o estilo de cotação variável, incluiu sugestões de comentários e algumas outras mudanças de estilo.