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/nullfaktycznie przetwarzają każdy bajt pliku i zapisać go na /dev/nullktó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 catnadal 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 ...