2015-07-19 64 views
0

我想写一个安装(bash)脚本,其中我需要检查用户是否安装了java 1.8。重定向java和javac输出

最明显的方式做到这一点是调用

javac -version | grep 1.8 

,但对于一些奇怪的原因javac的(和java)-version输出不能重定向 - 既不|,>或>> - 中第一种情况,第二种程序没有得到任何输入,第二种和第三种情况下,执行命令后输出文件为空。 我试着在三台不同的机器上检查它,结果每个都是一样的。

这是什么原因? 有没有其他方法可以检查java版本?

+0

你知道吗stdout和stderr是? (也可以考虑编写一个小的Java 1.3程序,它使用反射直接测试JVM提供的工具) –

+0

另外,当java 1.9出来时,你会做什么? –

+0

我并不关心1.9版本,因为那时软件不会被使用。 如果没有Java,'小Java 1.3'程序将无法工作。 – inexxt

回答

4

看来输出发送到STDERR。试试这个:

javac -version 2>&1 

这会的STDERR输出重定向到STDOUT。现在你应该可以管理命令。

如果你只是想将其重定向到一个文件,只是文件名代替&1,所以:

javac -version 2>out 
+0

'2>&1'不会“重定向到标准输出而不是标准错误”。什么是将stderr重定向到标准输出。这不是一回事;) – fge

+0

@Vivin Paliath - 你绝对正确:'2>&1'将stdout和stderr重定向到“相同的地方”。这是解决这个问题的好方法。另外:直到最近我才知道这个语法* ALSO *在Windows/DOS .bat文件中工作。 – paulsm4

+0

@fge糟糕,你是绝对正确的。这就是我的意思:) –