我整理了一个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脚本中正常工作。我试图逃避一些领域,但找不到解决方案。
有什么建议吗?
提前致谢。 斯科特
答案 0 :(得分:0)
命令
java -version
将其输出发送到stderr,而不是stdout。
您可以通过附加
将stderr重定向到stdout2>&1
命令。 e.g。
ssh -T -o $USER@$ip_addr "find / -name java -type f -exec ls -l {} \; -exec {} -version \; -exec echo \; 2>&1"