Usando o loop com o comando find

1

Eu quero ler todas as versões do java no meu sistema.

for i in 'find / -name java 2>/dev/null' 
do
echo $i checking
$i -version
done

Eu recebo um erro:

find: paths must precede expression: 2>/dev/null

Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Qual é o problema?

    
por r0tt 01.03.2017 / 13:11

1 resposta

4

Você está recebendo esse erro do loop for porque o loop for está realmente passando por um um elemento - a string , não o comando: " find / -name java 2>/dev/null ", então está sendo executado:

echo find / -name java 2>/dev/null checking
find / -name java 2>/dev/null -version

... que é onde o erro find surge.

Você pode estar tentando fazer:

for i in 'find / -name java 2>/dev/null' 
do
  echo $i checking
  $i -version
done

... (com backticks em vez de aspas simples), nesse caso eu sugeriria algo mais ao longo das linhas:

find / -name java -exec sh -c '"$1" -version' sh {} \; 2>/dev/null

Obrigado a don_crissti por apontar a melhor versão de Stéphane para encontrar ... exec e por indiretamente me lembrar de um método bash que é uma melhor maneira de encontrar e executar resultados do que voltando ao find :

shopt -s globstar dotglob
for match in /**/java
do
  echo match is "$match"
  "$match" -version
done
    
por 01.03.2017 / 13:22

Tags