Terminal piątek: standardowy strumień

Witamy w kolejny piątek ...

Czas poznać maleńką część terminala. Po długim namyśle postanowiłem stworzyć wpis o standardowe strumienie; Chociaż będzie to powierzchowne, myślę, że każdy powinien o tym wiedzieć.

Strumień standardowy

Strumień standardowy Składa się z kilku kanałów komunikacji między użytkownikiem a terminalem. Te „kanały” wejścia / wyjścia wyświetlają lub przechwytują informacje, gdy polecenie jest wykonywane.

Szybki diagram dla standardowych strumieni.

Szybki diagram dla standardowych strumieni.

Trzy połączenia we / wy to: stdin Standardowe wejście, stdout Wyjście standardowe, stderr Standardowy błąd.

stdin: standardowe wejście

Standardowe dane wejściowe to sposób, w jaki przechwytujemy informacje z polecenia za pomocą potoków, przekierowania, klawiatury itp. Identyfikujemy go za pomocą deskryptora pliku 0.

Deskryptor jest wskaźnikiem dostępu - w tym przypadku - do kanałów wejściowych i wyjściowych. Są to wartości int, zwykle 0, 1 i 2.

Przykładem stdin byłoby:

sort <lista

Pobiera wszystkie informacje, które są na liście - w tym przypadku liczby zapisane losowo - i podczas przekierowywania pliku do polecenia ls sortuje listę numeryczną alfabetycznie. W tym przykładzie flagi są niejawne.

stdout: standardowe wyjście

Standardowe wyjście, jak sama nazwa wskazuje, wyświetla wyjście polecenia za pośrednictwem konsoli. Jeśli napiszemy ls, wszystkie informacje, które pokazuje nam na ekranie, są standardowym wyjściem. Jest reprezentowany przez deskryptor 1.

Teraz spróbuję utworzyć instancję stdin i stdout za pomocą skryptu napisanego w bashu, po prostu dlatego, że uwielbiam bash hahaha. 🙂

test.sz

#! / bin / bash if [-t 0]; następnie echo "Używasz stdout" elif [-t 1]; następnie echo "Używasz stdin" else echo "Brutalny błąd" fi

Teraz zrzut ekranu, który pokazuje, jak używać skryptu. Podczas przekierowywania lub używania potoku ze skryptem użyj test -t wiedzieć, czy wykonywany jest tylko skrypt stdout, a jeśli nie, to oczywiście jest to standardowe wejście.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Skrypt, o którym mowa i jego wyniki ...

Skrypt, o którym mowa i jego wyniki ...

Pamiętaj, aby zmodyfikować polecenie i ćwiczyć, aby się uczyć.

stderr: błąd standardowy

Błąd standardowy to sposób, w jaki programy wyświetlają błędy lub diagnostykę. Jest reprezentowany przez deskryptor 2.

Aby zrozumieć tę koncepcję, oto sytuacja: kiedy chcemy zapisać błąd polecenia, pierwszą rzeczą, o której myślimy, jest przekierowanie wyjścia do zwykłego tekstu.

ls> info.txt

To zadziała, informacje o poleceniu będą przechowywane w zwykłym pliku tekstowym. Ale zapisując błąd, nie przechowuje go, ale pokazuje go na ekranie, a zwykły plik tekstowy jest pusty.

Zamiast tego, jeśli użyjemy 2>, aby wskazać, że należy zapisać stderr w pliku:

ls foo 2> info.txt

Teraz zapisze informacje o błędzie w pliku tekstowym.

Najbardziej Powłoka zezwalaj na przechowywanie stderr i stdout w jednym poleceniu polecenia z &>, gdzie Foo jest nieistniejącym katalogiem

ls Pobieranie Foo &> info.txt

Ten plik będzie zawierał informacje o błędzie podczas wykonywania ls w Foo i wyświetli listę katalogów w sekcji Pobrane.

I wreszcie, co czyni to sławnym 2> & 1?

Proste, przekierowuj stderr na stdout. To & w środku> i 1 oznacza, że ​​przekieruje na standardowe wyjście. Gdyby go tam nie było, byłoby to coś w rodzaju… „przekieruj błąd do pliku 1”.

A dzięki temu można przekierować:

  • stdout do pliku
  • stderr do pliku
  • stdout na stderr
  • stderr na stdout
  • stderr i stdout do pliku
  • między innymi

To tyle dla dzisiejszych ludzi. Czytamy i dziękujemy za zatrzymanie się. 😀


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Eliotime3000 powiedział

    Ciekawy. Dzięki twoim tutorialom znacznie bardziej podoba mi się Bash.

  2.   Quincy magoo powiedział

    Drogi, ciekawe, ale masz błąd w następującym wierszu:

    „A podczas przekierowywania pliku do polecenia ls” powinno być „i podczas przekierowywania pliku do polecenia sort”.

    Pozdrowienia.

  3.   Miguel powiedział

    Na początku tekstu jest błąd, gdy wskażesz polecenie „ls”, powinno to być „sort”:
    „Weź wszystkie informacje z listy - w tym przypadku liczby zapisane losowo - i przekieruj plik do polecenia ls (tutaj będzie to sortowanie)”

    Pozdrawiam i dziękuję za udostępnienie swojej pracy

  4.   drogowy powiedział

    Jest to świetne rozwiązanie dla crona, w którym chcesz, aby dane wyjściowe były opróżniane (/ dev / null), ale błędy były przechowywane w plikach. Ponadto, kiedy to robię, zwykle używam polecenia date, aby dokładnie określić, kiedy się nie udało.

    Bash (sh) ma te narzędzia, tak rozwinięte przez filozofię Uniksa "rób jedną rzecz i rób to dobrze"

  5.   Lolo powiedział

    Cóż, niczego się nie dowiedziałem

    1.    Głos powiedział

      Haha, cóż, to całkiem dobrze wyjaśnione, czego nie zrozumiałeś?