0

我整理了一个 find 命令,它将查找系统上的所有 java 安装。它有 3 个 -exec 子句: find / -name java -type f -exec ls -l {} \; -exec {} -版本\; -执行回声\;

从命令提示符运行时,它会生成如下输出:

-rwxr-xr-x 1 root root 47308 Oct 11  2009 ./usr/java/jre1.6.0_17/bin/java
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Server VM (build 14.3-b01, mixed mode)

-rwxr-xr-x 1 root root 47308 Nov 14 06:27 ./usr/java/jdk1.6.0_38/bin/java
java version "1.6.0_38"
Java(TM) SE Runtime Environment (build 1.6.0_38-b05)
Java HotSpot(TM) Server VM (build 20.13-b02, mixed mode)

我遇到的问题是从 ssh 运行命令时未生成 java 版本。

ssh -T -o $USER@$ip_addr  "find / -name java -type f -exec ls -l {} \; -exec {} -version \; -exec echo \;" 
-rwxr-xr-x 1 root root 47308 Oct 11  2009 ./usr/java/jre1.6.0_17/bin/java

-rwxr-xr-x 1 root root 47308 Nov 14 06:27 ./usr/java/jdk1.6.0_38/bin/java

执行第一个 -exec 子句 (ls -l)。第二个 -exec 子句不起作用(java -version)。第三个 -exec 子句被执行(回显)。

问题出在 ssh 命令上。这在 shell 脚本中可以正常工作。我尝试转义一些字段,但找不到解决方案。

有什么建议么?

提前致谢。斯科特

4

1 回答 1

0

命令

java -version

将其输出发送到 stderr,而不是 stdout。

您可以通过附加将标准错误重定向到标准输出

2>&1

到命令。例如

ssh -T -o $USER@$ip_addr  "find / -name java -type f -exec ls -l {} \; -exec {} -version \; -exec echo \; 2>&1"
于 2013-04-05T21:16:17.247 回答