我正在做一些审计自动化,这个例子描述了检查Java的版本,即使其他程序做同样的事情。
“java -version”的输出到STDERR,这很容易redirect,但我想发送shell错误(例如,当缺lessjava二进制文件时)到/ dev / null。 看起来shellredirect是一个无所谓的命题。
我迄今为止最有希望的尝试是:
{ /bin/ksh "{java -version 2>&1;}"; } 2>/dev/null
…它将-version命令的输出正确地发送到STDOUT,但是如果java不在那里,它也会向STDOUT发送shell“not found”错误。 我不想看到这个消息。
与以下行为相同:
{ /bin/ksh "{java -version 2>&1;}" 2>/dev/null; }
有谁知道一种方法来限制redirect的范围,所以每个进程得到它自己的? 我并不限于ksh,但是出于环境原因,它必须是基于shell的shell。
是不是可以检查是否被发现和可执行的Java?
test -x "$(which java)" && java -version 2>&1
或者如果你想绕过testing并检查Java错误,也是如此
java -version 2>/dev/null 1>/dev/null && java -version 2>&1
您可以redirect到其他描述符。 这是为bash,我认为它适用于ksh:
exec 3>javalog java ... 2>&1 >&3 exec 3>&-