bash, będąc shell ma 2 streams można przekierować te dane wyjściowe: stdout i stderr, bo ta moc musi być przekierowany gdzieś, Linux ma specyficzny "wyrzucić wszystko jest węzeł nieosiągalnego przez /dev/null. Wszystko, co wyślesz, zniknie w pustce.
(muszle mają również strumień wejściowy ale będę ignorować to tutaj ponieważ poprosił o tłumieniu wyjście)
Strumienie te są reprezentowane przez numery: 1 do stdout i 2 na stderr.
jeśli chcesz przekierować właśnie tak stdout chcesz zrobić z <
i >
operatorów (w zasadzie gdzie wskazuje na to, gdzie dane płynie)
przypuszczać chcemy tłumić stdout (przekierowanie do/dev/null):
psql db -f sql.sql > /dev/null
Jak widać jest to stdout jest domyślne, brak numeru strumień został wykorzystany jeśli chciał użyć numeru strumienia chcesz napisać
psql db -f sql.sql 1> /dev/null
Teraz, jeśli chcesz, aby stłumić stderror (numer strumień 2), można użyć
psql db -f sql.sql 2> /dev/null
Można również przekierować jednego strumienia do drugiego, na przykład stderror na standardowe wyjście, które jest przydatne, jeśli chcesz gdzieś zachować wynik, zwykły i błędy.
psql db -f sql.sql 2>&1 > log.txt
pamiętajcie nie może być spacji między 2>&1
Wreszcie, a czasem najbardziej interesujący jest fakt, że można stłumić wszystkie wyjścia przy użyciu &>
, gdy chcesz to doskonale cichy '
psql db -f sql.sql &> /dev/null
Podczas gdy te informacje są zasadniczo zgodne, to w tym przypadku nie działają, ponieważ psql nie wysyła komunikaty informacyjne do stderr. Są wymieszane z danymi na standardowym wyjściu. –
Nagle zdaję sobie sprawę, że twoim celem jest to, że ostateczny przypadek "&>" może być użyty przez OP do zatrzymania pager'a, poprzez tłumienie wszystkich wyników. Usuwam moje poparcie, jeśli w jakikolwiek sposób zmienisz swoją odpowiedź. –