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/nullsłuży do natychmiastowego wysyłania EOF do programu, aby nie czekał na dane wejściowe ( /dev/nullurzą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/nullodłą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/nullprogram 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).javaw $PATH.-cp, /home/weka.jar, weka.classifiers.trees.J48, –t, train_file`.