Um programa que estou desenvolvendo precisa executar um comando de prompt. O executável desse comando encontra-se na variável PATH do SO e sua localização pode variar de máquina para máquina.
Entretanto algumas máquinas podem não ter a variável PATH configurada corretamente, inviabilizando sua execução a partir de qualquer local.
Gostaria de saber se há alguma maneira de verificar pelo java se o comando em questão está disponível para execução em algum dos diretórios especificados na variável PATH (algo como "which <comando>" no linux).
Obrigado,
desconheço, mas existe comando pra setar a informação no PATH… que poderia ser a saída
Eu havia esquecido de informar que o mesmo arquivo jar deve servir tanto para Linux quanto para Windows.
Como não encontrei uma maneira mais “elegante” de resolver meu problema, escrevi o método abaixo para resolver da maneira mais grosseira mesmo.
public static boolean checkCommand(String command){
File test_file;
if (System.getProperty("os.name").compareTo("Linux") == 0) {
String[] paths = System.getenv("PATH").split(":");
for(int i=0;i<paths.length;i++){
if(!paths[i].endsWith("/")){
paths[i]=paths[i]+"/";
}
test_file=new File(paths[i]+command);
if(test_file.exists() && test_file.isFile()){
return true;
}
}
}
if (System.getProperty("os.name").startsWith("Windows")) {
String[] paths = System.getenv("PATH").split(";");
for (int i = 0; i < paths.length; i++) {
if (!paths[i].endsWith("\")) {
paths[i] = paths[i] + "\";
}
test_file = new File(paths[i] + command+".com");
if (test_file.exists() && test_file.isFile()) {
return true;
}
test_file = new File(paths[i] + command+".exe");
if (test_file.exists() && test_file.isFile()) {
return true;
}
test_file = new File(paths[i] + command+".bat");
if (test_file.exists() && test_file.isFile()) {
return true;
}
}
}
return false;
}
Embora o método acima tenha cara corpo e cheiro de POG, funcionou e está resolvendo o problema provisóriamente. Só não testei ainda no Windows.
Obrigado,