Não é possível verificar se o java é encontrado e executável?
test -x "$(which java)" && java -version 2>&1
ou se você quiser testar e verificar erros de java, também
java -version 2>/dev/null 1>/dev/null && java -version 2>&1
Estou fazendo alguma automação de auditoria, este exemplo descreve a verificação da versão do Java, mesmo que outros programas façam a mesma coisa.
A saída de "java -version" vai para STDERR, que é facilmente redirecionada, mas eu quero enviar erros de shell (por exemplo, quando o binário java está faltando) para / dev / null. Parece que o redirecionamento de shell é uma proposta de tudo ou nada.
Minha tentativa mais promissora até agora:
{ /bin/ksh "{java -version 2>&1;}"; } 2>/dev/null
... que envia corretamente a saída do comando -version para STDOUT, mas se o java não estiver lá, ele também enviará o erro "not found" do shell para o STDOUT. Eu não quero ver essa mensagem.
O mesmo comportamento com:
{ /bin/ksh "{java -version 2>&1;}" 2>/dev/null; }
Alguém sabe uma maneira de limitar o escopo do redirecionamento para que cada processo receba o seu próprio? Eu não estou limitado a ksh, mas por razões de ambiente tem que ser um one-liner baseado em shell.
Você pode redirecionar para descritores adicionais. Isso é para o bash, acho que funciona para o ksh também:
exec 3>javalog
java ... 2>&1 >&3
exec 3>&-