ssh下的find命令的多个-exec语句问题

时间:2013-04-05 21:01:04

标签: ssh

我整理了一个find命令,可以在系统上找到所有java安装。它有3个exec子句:     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
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)。执行第3个-exec子句(echo)。

问题在于ssh命令。这可以在shell脚本中正常工作。我试图逃避一些领域,但找不到解决方案。

有什么建议吗?

提前致谢。 斯科特

1 个答案:

答案 0 :(得分:0)

命令

java -version

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

您可以通过附加

将stderr重定向到stdout
2>&1

命令。 e.g。

ssh -T -o $USER@$ip_addr  "find / -name java -type f -exec ls -l {} \; -exec {} -version \; -exec echo \; 2>&1"