2010-03-29 7 views
5

modlę polecenie powłoki przez klasy Process z Java i drukujeWywoływanie powłoki z Javy, ale skarg „stty: standardowe wejście: Invalid argument”

"stty: standard input: Invalid argument" 

bez względu na to, czy polecenie jest dobre czy złe (normalny wyświetlane jest również wyjście polecenia powłoki). Jeśli uruchomię polecenie powłoki w powłoce, nie pojawi się taki komunikat o błędzie.

Polecenie to jest coś takiego: {"/bin/csh", "-c", "echo hello"}

+1

W takim przypadku kod Przykładem może być wspaniała pomoc. – Riduidel

+0

Zrobiłem tylko bardzo proste rzeczy, aby wywołać "echo hello" z języka Java. Ten kod działa dokładnie ok kilka tygodni temu, więc myślę, że coś nie tak z moim bashem ostatnio, nie java – solotim

+0

Wierzę, że są sposoby w języku Java do wykonywania funkcji systemu operacyjnego i nie ma potrzeby, aby wywoływać polecenia systemowe. jakie polecenie wywołujesz, że Java nie ma modułu do tego? – ghostdog74

Odpowiedz

3

Spróbuj użyć opcji csh -f wyłączyć odczyt .chsrc i .login pliki:

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

Może działać. Ale użytkownik może tego nie lubić. – solotim

+0

@solotim: dlaczego nie? w każdym razie, jeśli działa, jest to wskazanie, że skrypt .cshrc lub .login próbuje wyregulować terminal bez sprawdzania, czy istnieje. Następnym krokiem powinno być dodanie tej kontroli do skryptów ... –

6

Jesteś wywoływania komendy stty z .profile lub .bash_profile. Będziesz musiał przekierować standardowy błąd na numer /dev/null.

stty blah blah blah 2>/dev/null 

stty nie radzi sobie z pseudo-tty, które zapewnia Java w ostrzeli.

+0

Dzięki, ale co bla znaczy? – solotim

+1

Nie ma znaczenia, co oznacza. Wywoływanie stty w kontekście, w którym nie ma tty, takie jak proces exec'd, jest błędne. Nie możesz tego zrobić. – EJP

0

rzekła dokumentacji java.lang.Process:

„Metody, które tworzą procesy mogą nie działać dobrze dla specjalnych procesów na niektórych platformach rodzimych, takich jak rodzimych procesów okienkowych, demonów procesów, Win16/DOS procesy na Microsoft Windows lub skrypty powłoki Utworzony podproces nie ma własnego terminala lub konsoli, nie ma . "

Być może zamiast tego chcesz mieć numer java.lang.ProcessBuilder.

+0

Dzięki. Ale w rzeczywistości również użyłem ProcessBuilder, okazuje się, że te same wyniki. – solotim

0

Szukasz tutaj. udało mi się uruchomić kilka poleceń jak this

Powiązane problemy