Вы получаете эту ошибку из цикла for
, потому что цикл for фактически перебирает один элемент - строку , а не команду: « find / -name java 2> / dev / null
», поэтому он работает:
echo find / -name java 2>/dev/null checking
find / -name java 2>/dev/null -version
... именно здесь возникает ошибка find
.
Возможно, вы пытаетесь сделать:
for i in `find / -name java 2>/dev/null`
do
echo $i checking
$i -version
done
... (с обратными кавычками вместо одинарных кавычек), и в этом случае я бы предложил что-то большее, например:
find / -name java -exec sh -c '"$1" -version' sh {} \; 2>/dev/null
Спасибо don_crissti за указание Лучшая версия Стефана find ... exec и за косвенное напоминание мне о методе bash, который один лучший способ найти и выполнить результаты, чем цикл по find :
shopt -s globstar dotglob
for match in /**/java
do
echo match is "$match"
"$match" -version
done