2010-03-29 13 views
5

invoco un comando di shell per classe di processo da Java e la stampaInvocare shell da Java, reclami "stty: standard input: Invalid argument"

"stty: standard input: Invalid argument" 

non importa se il comando è giusto o sbagliato (normale viene mostrato anche l'output del comando shell). Se eseguo il comando shell nella shell, non viene mostrato alcun messaggio di errore.

Il comando è qualcosa di simile: {"/bin/csh", "-c", "echo hello"}

+1

In tal caso, un codice di esempio potrebbe essere di grande aiuto. – Riduidel

+0

Non ho fatto altro che cose molto semplici per invocare "echo hello" da java. Questo codice funziona correttamente alcune settimane fa, quindi penso che qualcosa di sbagliato con la mia bash recentemente, non java – solotim

+0

credo che ci siano modi in Java per eseguire le funzioni del sistema operativo e non è necessario chiamare i comandi di sistema. quale comando stai chiamando che Java non ha un modulo per questo? – ghostdog74

risposta

3

Provare ad usare l'opzione -f di csh per disabilitare la lettura del .chsrc e .login file:

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

Potrebbe funzionare. Ma l'utente potrebbe non apprezzare questo. – solotim

+0

@solotim: perché no? comunque, se funziona, è un'indicazione che lo script .cshrc o .login sta provando a regolare il terminale senza verificare se ce n'è uno. Il prossimo passo dovrebbe essere quello di aggiungere questo controllo agli script ... –

6

si invoca il comando stty dal .profile o .bash_profile. Dovrai reindirizzare il suo errore standard a /dev/null.

stty blah blah blah 2>/dev/null 

stty non può gestire lo pseudo-tty fornito da Java durante il bombardamento.

+0

Grazie, ma cosa significa blah? – solotim

+1

Non importa ciò che rappresenta. Invocare stty in un contesto in cui non esiste una tty, come un processo di exec, è sbagliato. Non puoi farlo. – EJP

0

Disse la documentazione per java.lang.Process:

"I metodi che creano processi possono non funzionare bene per lavorazioni particolari su alcune piattaforme nativi, come processi nativi a finestre, daemon processi, Win16/DOS processi su Microsoft Windows o script di shell Il sottoprocesso creato non dispone di proprio terminale o console. "

Forse ti piacerebbe il java.lang.ProcessBuilder, invece.

+0

Grazie. Ma in realtà ho usato ProcessBuilder, si ottengono gli stessi risultati. – solotim

0

Hai guardato qui. sono riuscito a eseguire alcuni comandi come this

Problemi correlati