Wczoraj przeczytałem ten komentarz SO, który mówi, że w powłoce (przynajmniej bash
) >&-
„ma taki sam wynik jak” >/dev/null
.
Ten komentarz faktycznie odnosi się do przewodnika ABS jako źródła jego informacji. Ale to źródło mówi, że >&-
składnia „zamyka deskryptory plików”.
Nie jest dla mnie jasne, czy dwie akcje zamknięcia deskryptora pliku i przekierowania go do urządzenia zerowego są całkowicie równoważne. Moje pytanie brzmi: czy są?
Na pierwszy rzut oka wydaje się, że zamknięcie deskryptora jest jak zamknięcie drzwi, ale przekierowanie do zerowego urządzenia otwiera drzwi do otchłani! Oba nie wydają mi się dokładnie takie same, ponieważ jeśli zobaczę zamknięte drzwi, nie spróbuję z nich niczego wyrzucić, ale jeśli zobaczę otwarte drzwi, założę się, że mogę.
Innymi słowy, zawsze zastanawiałem się, czy >/dev/null
środki, które cat mybigfile >/dev/null
faktycznie przetwarzają każdy bajt pliku i zapisać go na /dev/null
którym zapomina. Z drugiej strony, jeśli powłoka napotka zamknięty deskryptor pliku, myślę (ale nie jestem pewien), że po prostu nic nie napisze, choć pozostaje pytanie, czy cat
nadal będzie czytał każdy bajt.
Ten komentarz mówi >&-
i >/dev/null
„ powinien ” być taki sam, ale nie jest to dla mnie tak głośna odpowiedź. Chciałbym uzyskać bardziej autorytatywną odpowiedź z pewnym odniesieniem do standardowego lub źródłowego rdzenia, czy nie ...