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.