Jak potokować standardowy strumień błędów bez potokowania standardowego strumienia wyjściowego?
Wiem, że to polecenie działa, ale wypisuje również standard.
Command 2>&1 | tee -a $LOG
Jak uzyskać tylko standardowy błąd?
Uwaga: Chcę z tego napisać strumień stderr do dziennika i napisać zarówno stderr, jak i stdout do konsoli.
tee.exe
zainstalowanym :)Polecenie Kyle'a dla systemu Unix / Linux ma za zadanie przełączanie STDERR za pomocą STDOUT; jednak wyjaśnienie nie jest całkiem poprawne. Operatorzy przekierowujący nie kopiują ani nie kopiują, po prostu przekierowują przepływ w innym kierunku.
Przepisanie polecenia Kyle'a poprzez tymczasowe przesunięcie 3> i 1 do końca ułatwiłoby zrozumienie koncepcji:
Napisany w ten sposób Linux wyświetli błąd, ponieważ & 3 jeszcze nie istnieje, ponieważ znajduje się przed 3> i 1. 3> coś jest sposobem na zadeklarowanie (zdefiniowanie), że użyjemy trzeciej rury, więc musi być zlokalizowana przed dopływem wody do tej rury, na przykład sposób, w jaki Kyle ją napisał. Spróbuj tego w inny sposób dla zabawy:
Szkoda, że nie można robić kopii. Nie możesz robić rzeczy takich jak „3> i 1 3> i 2” w tym samym poleceniu, ponieważ Linux użyje tylko pierwszego znalezionego i odrzuca drugi.
Nie znalazłem (jeszcze) sposobu, aby wysłać zarówno błąd, jak i zwykłe wyjście do pliku, a także wysłać kopię błędu do standardowego wyjścia za pomocą jednego polecenia. Na przykład mam zadanie cron, które chcę, aby oba dane wyjściowe (błąd i standard) trafiły do pliku dziennika i pozwolić, aby błąd również zgasł, aby wiadomość e-mail została wysłana do mojego BlackBerry. Mogę to zrobić za pomocą dwóch poleceń za pomocą „tee”, ale błąd nie pojawia się we właściwej kolejności wśród zwykłych wierszy wyjściowych w pliku. W ten sposób rozwiązałem problem:
Zauważ, że muszę użyć log1 dwa razy i muszę dołączyć w obu przypadkach, pierwszy używa opcji „-a” dla polecenia „tee”, a drugi używa „>>”.
Robiąc log kota 1 otrzymujesz:
Zauważ, że błąd nie pojawia się w drugim wierszu tak, jak powinien.
źródło
mult_ios
opcję (domyślnie włączone), aby móc przekierowywać FD wiele razy.zgodnie ze stroną podręcznika dla ksh (pdksh), możesz po prostu:
Polecenie 2> i 1> / dev / null | cat -n
tzn. dup stderr do stdout, przekieruj stdout do / dev / null, a następnie potokuj do 'cat -n'
działa na pdksh w moim systemie:
źródło
uruchomiłem go tak, jak kiedykolwiek chciałeś, ponieważ potrzebowałem go i dopracowałem twoje polecenie. teraz dla mnie działa poprawnie przy użyciu bash 3.2 na debian squeeze przy użyciu tego
podczas gdy log1 rejestruje stdout i stderr, a log2 rejestruje tylko stderr i nic więcej nie jest wyświetlane na ekranie.
źródło