내 시스템의 모든 Java 버전을 읽고 싶습니다.
for i in 'find / -name java 2>/dev/null'
do
echo $i checking
$i -version
done
오류가 발생합니다.
찾기: 경로는 표현식보다 앞에 있어야 합니다: 2>/dev/null
사용법: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [표현식]
문제가 무엇입니까?
답변1
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에게 감사드립니다.Stéphane의 find의 더 나은 버전 ... exec그리고 간접적으로 bash 메소드를 생각나게 합니다.하나결과를 찾고 실행하는 것보다 더 좋은 방법은 무엇일까요?루프 검색:
shopt -s globstar dotglob
for match in /**/java
do
echo match is "$match"
"$match" -version
done