Estoy tratando de ejecutar algunos comandos de Linux desde Java usando redirección (> &) y tuberías (|). ¿Cómo puede Java invocar csh
o bash
comandos?
Traté de usar esto:
Process p = Runtime.getRuntime().exec("shell command");
Pero no es compatible con redirecciones o canalizaciones.
java
shell
command-line
Narek
fuente
fuente
cat
ycsh
no tienen nada que ver el uno con el otro.Respuestas:
exec no ejecuta un comando en su shell
tratar
en lugar.
EDITAR :: No tengo csh en mi sistema, así que usé bash en su lugar. Lo siguiente funcionó para mí
fuente
Utilice ProcessBuilder para separar comandos y argumentos en lugar de espacios. Esto debería funcionar independientemente del shell utilizado:
fuente
Sobre la base del ejemplo de @ Tim para crear un método autónomo:
(El ejemplo de prueba es un comando que enumera todos los archivos de un directorio y sus subdirectorios, de forma recursiva, en orden cronológico ).
Por cierto, si alguien puede decirme por qué necesito cuatro y ocho barras invertidas allí, en lugar de dos y cuatro, puedo aprender algo. Hay un nivel más de ausencia de escape que el que estoy contando.
Editar: Acabo de probar este mismo código en Linux, ¡y resulta que necesito la mitad de barras invertidas en el comando de prueba! (Es decir: el número esperado de dos y cuatro). Ahora ya no es solo extraño, es un problema de portabilidad.
fuente