私のシステムのすべての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