É bastante simples executar um comando Unix a partir de Java.
Runtime.getRuntime().exec(myCommand);
Mas é possível executar um script de shell Unix a partir do código Java? Se sim, seria uma boa prática executar um script de shell no código Java?
Respostas:
Você realmente deve olhar para o Process Builder . É realmente construído para esse tipo de coisa.
fonte
Você também pode usar a biblioteca executiva do Apache Commons .
Exemplo:
Para referência adicional, também é fornecido um exemplo no Apache Doc .
fonte
OutputStream
paraDefaultExecuter
usarDefaultExecuter.setStreamHandler
método para saída de captura emOutputStream
. Por favor, consulte esta discussão para mais informações: Como posso capturar a saída de um comando ...Eu diria que não está no espírito do Java executar um script de shell a partir do Java. O Java deve ser multiplataforma, e a execução de um shell script limitaria seu uso a apenas UNIX.
Com isso dito, é definitivamente possível executar um shell script a partir do Java. Você usaria exatamente a mesma sintaxe listada (eu ainda não tentei, mas tente executar o shell script diretamente e, se isso não funcionar, execute o próprio shell, passando o script como parâmetro de linha de comando) .
fonte
switches
eif
instruções para contornar todas as nuances que não funcionam exatamente da mesma maneira em plataformas diferentes, apesar dos melhores esforços das pessoas que criaram as bibliotecas principais do java.Eu acho que você respondeu sua própria pergunta com
Quanto à boa prática ... o que você está tentando fazer com um shell script que não pode fazer com Java?
fonte
Sim, é possível fazer isso. Isso funcionou para mim.
fonte
Aqui está o meu exemplo. Espero que faça sentido.
fonte
Sim, é possível e você já respondeu! Sobre boas práticas, acho melhor iniciar comandos a partir de arquivos e não diretamente do seu código. Então você tem que fazer Java executar a lista de comandos (ou um comando) em uma já existente
.bat
,.sh
,.ksh
... arquivos. Aqui está um exemplo de execução de uma lista de comandos em um arquivoMyFile.sh
:fonte
Para evitar a necessidade de codificar um caminho absoluto, você pode usar o método a seguir que encontrará e executará seu script se ele estiver no diretório raiz.
fonte
Quanto a mim, todas as coisas devem ser simples. Para executar o script, basta executar
fonte
A biblioteca do ZT Process Executor é uma alternativa ao Apache Commons Exec. Possui funcionalidade para executar comandos, capturar sua saída, definir tempos limites etc.
Ainda não o usei, mas parece razoavelmente bem documentado.
Um exemplo da documentação: Executando um comando, bombeando o stderr para um criador de logs, retornando a saída como sequência UTF8.
Sua documentação lista as seguintes vantagens sobre o Commons Exec:
fonte
Aqui está um exemplo de como executar um script bat / cmd do bash do Unix ou do Windows a partir de Java. Os argumentos podem ser transmitidos no script e a saída recebida do script. O método aceita um número arbitrário de argumentos.
Ao executar no Unix / Linux, o caminho deve ser semelhante ao Unix (com '/' como separador), ao executar no Windows - use '\'. Hier é um exemplo de um script bash (test.sh) que recebe um número arbitrário de argumentos e dobra todos os argumentos:
Ao ligar
no Unix / Linux, a saída é:
Hier é um script cmd simples do Windows test.cmd que conta o número de argumentos de entrada:
Ao chamar o script no Windows
A saída é
fonte
É possível, apenas executá-lo como qualquer outro programa. Apenas verifique se o seu script possui o # apropriado! (she-bang) como a primeira linha do script e verifique se há permissões de execução no arquivo.
Por exemplo, se for um script bash, coloque #! / Bin / bash na parte superior do script, também chmod + x.
Além disso, se for uma boa prática, não, não é, especialmente para Java, mas se você economizar muito tempo exibindo um script grande e não receber um pagamento extra por isso;) economize seu tempo; script e coloque a portabilidade para Java na sua lista de tarefas de longo prazo.
fonte
fonte
Esta é uma resposta tardia. No entanto, pensei em me esforçar para conseguir que um script shell fosse executado a partir de um aplicativo Spring-Boot para futuros desenvolvedores.
Eu estava trabalhando no Spring-Boot e não consegui encontrar o arquivo a ser executado no meu aplicativo Java e estava sendo lançado
FileNotFoundFoundException
. Eu tive que manter o arquivo noresources
diretório e tive que definir o arquivo para ser verificadopom.xml
enquanto o aplicativo estava sendo iniciado da seguinte maneira.error code = 13, Permission Denied
. Então eu tive que tornar o arquivo executável executando este comando -chmod u+x myShellScript.sh
Finalmente, eu poderia executar o arquivo usando o seguinte trecho de código.
Espero que isso resolva o problema de alguém.
fonte
Da mesma forma que o Solaris 5.10 funciona assim,
./batchstart.sh
há um truque que não sei se o seu sistema operacional aceita o uso\\. batchstart.sh
. Essa barra dupla pode ajudar.fonte
Eu acho que com
A verificação do sistema operacional pode gerenciar os scripts shell / bash, se houver suporte. se houver necessidade de tornar o código portátil.
fonte
para uso em linux
e para uso;
OU
fonte