Próbowałem uruchomić przykładowy program Java za pomocą następującego wiersza polecenia. Nie wiem jednak, do czego służy część końcowa < /dev/null &
?
java -cp /home/weka.jar weka.classifiers.trees.J48 –t train_file >& log < /dev/null &
Próbowałem uruchomić przykładowy program Java za pomocą następującego wiersza polecenia. Nie wiem jednak, do czego służy część końcowa < /dev/null &
?
java -cp /home/weka.jar weka.classifiers.trees.J48 –t train_file >& log < /dev/null &
Odpowiedzi:
< /dev/null
służy do natychmiastowego wysyłania EOF do programu, aby nie czekał na dane wejściowe ( /dev/null
urządzenie zerowe, to specjalny plik, który odrzuca wszystkie zapisane na nim dane, ale informuje, że operacja zapisu się powiodła i nie dostarcza danych do każdy proces, który czyta z niego, natychmiast uzyskując EOF). &
jest specjalnym rodzajem separatora poleceń służącym do tła poprzedniego procesu.
Nie wiedząc, że program jest wywoływany, nie wiem bezpośrednio, dlaczego należy go uruchomić w ten sposób.
</dev/null
odłącza wejście programu od terminala. Niektóre programy reagują inaczej w zależności od tego, do czego podłączone jest ich standardowe wejście. Dzięki przekierowaniu </dev/null
program może stwierdzić, że jego dane wejściowe nie pochodzą z terminala, i natychmiast otrzyma wskazanie końca pliku, jeśli spróbuje odczytać dane ze standardowego wejścia.
Sam &
na końcu powoduje, że program jest wykonywany w tle. Oznacza to, że natychmiast otrzymasz monit powłoki. Bez tego &
komunikat powłoki byłby zwracany tylko wtedy, gdy program zakończy wykonywanie.
Zauważ, że samodzielny &
nie jest związany z >&
. >&
jest operatorem przekierowania (w tcsh, bash i zsh), który przekierowuje zarówno standardowe wyjście programu, jak i standardowy błąd programu na nazwę pliku określoną po operatorze (tutaj log
).
Innymi słowy, to, co robi powłoka, gdy widzi ten wiersz poleceń, to:
/dev/null
( urządzenie zerowe ).log
(tworzenie pliku, jeśli jeszcze nie istnieje, i obcinanie, jeśli istnieje).java
w $PATH
.-cp
, /home/weka.jar
, weka.classifiers.trees.J48
, –t
, train_file`.