Estou tentando executar alguns comandos Linux de Java usando redirecionamento (> &) e tubos (|). Como o Java pode invocar csh
ou bash
comandos?
Tentei usar isto:
Process p = Runtime.getRuntime().exec("shell command");
Mas não é compatível com redirecionamentos ou canais.
java
shell
command-line
Narek
fonte
fonte
cat
ecsh
não têm nada a ver um com o outro.Respostas:
exec não executa um comando em seu shell
experimentar
em vez de.
EDIT :: Não tenho csh no meu sistema, então usei o bash. O seguinte funcionou para mim
fonte
Use ProcessBuilder para separar comandos e argumentos em vez de espaços. Isso deve funcionar independentemente do shell usado:
fonte
Com base no exemplo de @ Tim para fazer um método independente:
(O exemplo de teste é um comando que lista todos os arquivos em um diretório e seus subdiretórios, recursivamente, em ordem cronológica .)
A propósito, se alguém puder me dizer por que preciso de quatro e oito barras invertidas ali, em vez de duas e quatro, posso aprender alguma coisa. Há mais um nível de acontecimento sem escape do que o que estou contando.
Edit: acabei de tentar este mesmo código no Linux, e aí descobri que preciso da metade das barras invertidas no comando de teste! (Ou seja: o número esperado de dois e quatro.) Agora não é mais apenas estranho, é um problema de portabilidade.
fonte