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