2010-03-29 15 views
5

que invocar un comando shell por clase de proceso de Java y se imprimeLa invocación de la cáscara de Java, quejas "stty: entrada estándar: argumento no válido"

"stty: standard input: Invalid argument" 

no importa si el comando es correcto o incorrecto (normal la salida del comando del shell también se muestra). Si ejecuto el comando de shell en el shell, no se muestra ningún mensaje de error.

El comando es algo como esto: {"/bin/csh", "-c", "echo hello"}

+1

En tal caso, un código de ejemplo podría ser de gran ayuda. – Riduidel

+0

No hice más que cosas muy simples para invocar "echo hello" desde java. Este código realmente funciona bien hace varias semanas, así que creo que algo está mal con mi bash recientemente, no java – solotim

+0

, creo que hay formas en Java para realizar funciones del sistema operativo y no hay necesidad de llamar a los comandos del sistema. ¿A qué comando llamas que Java no tiene un módulo para eso? – ghostdog74

Respuesta

3

Trate de usar la opción -f de CSH para desactivar la lectura de la .chsrc y .login:

{"/bin/csh", "-cf", "echo hello"} 
+0

Puede funcionar. Pero al usuario puede no gustarle esto. – solotim

+0

@solotim: ¿por qué no? de todos modos, si funciona, es una indicación de que el script .cshrc o .login está tratando de ajustar el terminal sin verificar si hay uno. El siguiente paso debería ser agregar esta verificación a los scripts ... –

6

está invocando el comando de su stty.profile, o .bash_profile. Tendrá que redirigir su error estándar al /dev/null.

stty blah blah blah 2>/dev/null 

stty no puede ocuparse de la pseudo-tty que proporciona Java en el bombardeo.

+0

Gracias, pero ¿qué es lo que bla? – solotim

+1

No importa lo que representa. Invocar stty en un contexto donde no hay un tty, como un proceso ejecutado, es incorrecto. No puedes hacerlo – EJP

0

Dijo el documentación para java.lang.Process:

"Los métodos que crean procesos pueden no funcionar bien para los procesos especiales en ciertas plataformas nativas, como procesos nativos de ventanas, demonio procesos, Win16/DOS procesos en Microsoft Windows o scripts de shell. El subproceso creado no tiene su propio terminal o consola. "

Tal vez le gustaría el java.lang.ProcessBuilder, en su lugar.

+0

Gracias. Pero en realidad usé ProcessBuilder también, resulta el mismo resultado. – solotim

0

¿Has mirado aquí. me las arreglé para ejecutar algunos comandos como this

Cuestiones relacionadas