OnWorks Linux i Windows Online WorkStation

logo

Darmowy hosting online dla stacji roboczych

<Poprzedni | Spis treści | Następne>

Przekierowywanie wyjścia standardowego

Przekierowanie wejścia/wyjścia pozwala nam na nowo zdefiniować, dokąd ma trafić standardowe wyjście. Aby przekierować standardowe wyjście do innego pliku zamiast na ekran, używamy operatora przekierowania „>”, po którym następuje nazwa pliku. Dlaczego mielibyśmy to robić? Często przydatne jest przechowywanie danych wyjściowych polecenia w pliku. Na przykład moglibyśmy polecić powłoce wysłanie danych wyjściowych polecenia. ls polecenie do pliku ls-output.txt zamiast ekranu:


[ja@linuxbox ~]$ ls -l /usr/bin > ls-output.txt

[ja@linuxbox ~]$ ls -l /usr/bin > ls-output.txt


Tutaj stworzyliśmy długą listę / usr / bin katalog i wysłałem wyniki do pliku

ls-output.txt. Przyjrzyjmy się przekierowanemu wynikowi polecenia:


[ja@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 mnie mnie 167878 2016-02-01 15:07 ls-output.txt

[ja@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 mnie mnie 167878 2016-02-01 15:07 ls-output.txt


Dobrze; ładny, duży plik tekstowy. Jeśli spojrzymy na plik z mniej, zobaczymy, że plik

Plik ls-output.txt rzeczywiście zawiera wyniki naszego polecenia ls:


[ja@linuxbox ~]$ mniej ls-output.txt

[ja@linuxbox ~]$ mniej ls-output.txt


Powtórzmy teraz nasz test przekierowania, ale tym razem z pewną zmianą. Zmienimy nazwę katalogu na taką, która nie istnieje:



[ja@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls: nie można uzyskać dostępu do /bin/usr: Nie ma takiego pliku ani katalogu

[ja@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls: nie można uzyskać dostępu do /bin/usr: Nie ma takiego pliku ani katalogu


Otrzymaliśmy komunikat o błędzie. To zrozumiałe, ponieważ wskazaliśmy nieistniejący katalog. /bin/usrale dlaczego komunikat o błędzie został wyświetlony na ekranie, zamiast zostać przekierowanym do pliku ls-output.txt? Odpowiedź brzmi: ls Program nie wysyła komunikatów o błędach na standardowe wyjście. Zamiast tego, jak większość dobrze napisanych programów Unix, wysyła komunikaty o błędach na standardowe wyjście błędów. Ponieważ przekierowaliśmy jedynie standardowe wyjście, a nie standardowe wyjście błędów, komunikat o błędzie i tak został wysłany na ekran. Zobaczymy, jak

Przekierowywanie wyjścia standardowego


przekierowanie standardowego błędu zajmie tylko chwilę, ale najpierw spójrzmy, co stało się z naszym plikiem wyjściowym:



[ja@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 mnie mnie 0 2016-02-01 15:08 ls-output.txt

[ja@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 mnie mnie 0 2016-02-01 15:08 ls-output.txt


Plik ma teraz zerową długość! Dzieje się tak, ponieważ gdy przekierowujemy dane wyjściowe za pomocą operatora przekierowania „>”, plik docelowy jest zawsze przepisywany od początku. Ponieważ nasz ls Polecenie nie wygenerowało żadnych wyników, a jedynie komunikat o błędzie. Operacja przekierowania rozpoczęła nadpisywanie pliku, a następnie zatrzymała się z powodu błędu, co spowodowało jego obcięcie. W rzeczywistości, jeśli kiedykolwiek będziemy musieli faktycznie obciąć plik (lub utworzyć nowy, pusty plik), możemy zastosować taką sztuczkę:



[ja@linuxbox ~]$ > ls-output.txt

[ja@linuxbox ~]$ > ls-output.txt


Samo użycie operatora przekierowania bez poprzedzającego go polecenia spowoduje obcięcie istniejącego pliku lub utworzenie nowego, pustego pliku.

Jak więc możemy dołączyć przekierowane dane wyjściowe do pliku zamiast nadpisywać go od początku? W tym celu używamy operatora przekierowania „>>”, w następujący sposób:



[ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt

[ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt


Użycie operatora „>>” spowoduje dołączenie danych wyjściowych do pliku. Jeśli plik jeszcze nie istnieje, zostanie utworzony tak samo, jak gdyby użyto operatora „>”. Przetestujmy to:



[ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [ja@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 mnie mnie 503634 2016-02-01 15:45 ls-output.txt

[ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [ja@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [ja@linuxbox ~]$ ls -l ls-output.txt

-rw-rw-r-- 1 mnie mnie 503634 2016-02-01 15:45 ls-output.txt


Powtórzyliśmy polecenie trzy razy, a plik wyjściowy zwiększył się trzykrotnie.


Najlepsze przetwarzanie w chmurze dla systemu operacyjnego w OnWorks: