我编写了一个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)。执行第三个-exec子句(echo)。
问题出在ssh命令上。这在shell脚本中工作得很好。我试着逃离一些领域,但找不到解决方案。
有什么建议吗?
提前谢谢。史考特
发布于 2013-04-06 05:16:17
该命令
java -version将其输出发送到stderr,而不是stdout。
您可以通过附加以下命令将stderr重定向到stdout
2>&1添加到命令。例如:
ssh -T -o $USER@$ip_addr "find / -name java -type f -exec ls -l {} \; -exec {} -version \; -exec echo \; 2>&1"https://stackoverflow.com/questions/15843476
复制相似问题