Rozumiem, że > /dev/null
przekierowuje rzeczy, na /dev/null
które działa jak czarna dziura. Nie rozumiem jednak, co < /dev/null
to znaczy. Widziałem skrypt napisany w ten sposób:
nohup myprogram > foo.out 2> foo.err < /dev/null &
Co więc < /dev/null
oznacza powyższy kod?
oto przykład, w którym jest to sugerowane
<&-
?Odpowiedzi:
Zapewnia, że wszystkie strumienie we / wy są rozliczane / zajęte.
W ten sposób proces działający w tle nie ma nic „powiązanego” z terminalem, więc możesz zająć się swoją firmą bez próby odczytania z TTY przez program, co spowodowałoby zawieszenie się terminalu.
W tym przypadku, ponieważ uruchamiasz proces za pomocą ssh ze skryptu powłoki, upewnia się, że skrypt może poruszać się bez ograniczeń.
źródło
< /dev/null
.< /dev/null
?program </dev/null
oznacza, żeprogram
pobiera argument wejściowy (może być parametrem wejściowym do opcji lub może być plikiem wejściowym do obsługi) za pomocą deskryptora pliku 0, tj. STDIN, z pliku/dev/null
.Jak już wiesz,
/dev/null
nie zawiera nic, powiadomi EOF (koniec pliku) po odczytaniu, więc każdy program, który pobiera dane wejściowe/dev/null
, zasadniczo przekierowuje nic jako swój argument wejściowy.źródło
< /dev/null
? Po prostu napisz to jakonohup myprogram > foo.out 2> foo.err &
program
czego chce jako STDIN? Niektóre programy mogą wymagać tego, więc musisz wstawić coś jako STDIN, może tak być w tym przypadku, gdy użyłeś po prostu/dev/null
jako STDIN i pozwolisz programowi wykonać przetwarzanie i umieścił STDOUT i STDERR we wspomnianych plikach.