我想阅读我系统上的所有 java 版本。
for i in 'find / -name java 2>/dev/null'
do
echo $i checking
$i -version
done
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
查找:路径必须位于表达式之前:2>/dev/null
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [路径...] [表达式]
问题是什么?
您从循环中收到该错误,因为您的 for 循环实际上是在一个for
元素上循环-字符串,而不是命令:“ ”,因此它正在运行:find / -name java 2>/dev/null
echo find / -name java 2>/dev/null checking\nfind / -name java 2>/dev/null -version\n
Run Code Online (Sandbox Code Playgroud)\n\n...这就是find
出现错误的地方。
您可能正在尝试执行以下操作:
\n\nfor i in `find / -name java 2>/dev/null` \ndo\n echo $i checking\n $i -version\ndone\n
Run Code Online (Sandbox Code Playgroud)\n\n...(用反引号而不是单引号),在这种情况下,我会建议更多类似的内容:
\n\nfind / -name java -exec sh -c \'"$1" -version\' sh {} \\; 2>/dev/null\n
Run Code Online (Sandbox Code Playgroud)\n\n感谢 don_crissti 指出St\xc3\xa9phane\ 的 find ... exec 的更好版本,并间接提醒我 bash 方法,这是一种比循环 find更好的查找和执行结果的方法:
\n\nshopt -s globstar dotglob\nfor match in /**/java\ndo\n echo match is "$match"\n "$match" -version\ndone\n
Run Code Online (Sandbox Code Playgroud)\n