Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
|
so:redirects [2023/04/01 20:16] jkonczak |
so:redirects [2026/03/31 00:04] (aktualna) jkonczak |
||
|---|---|---|---|
| Linia 13: | Linia 13: | ||
| ''**paste** //plik_1// [//plik_2//]...'' czyta po jednej linii z każdego z plików | ''**paste** //plik_1// [//plik_2//]...'' czyta po jednej linii z każdego z plików | ||
| i wypisuje je oddzielone tabem, powtarzając to do wyczerpania najdłuższego pliku. | i wypisuje je oddzielone tabem, powtarzając to do wyczerpania najdłuższego pliku. | ||
| + | |||
| + | <small> | ||
| + | ''**join** [-t //separator//] [-1 //filed_1//] [-2 //filed_2//] //infile_1// //infile_2//'' łączy te wiersze z pliku //infile_1// z wierszami pliku //infile_2//, które na polu //filed_1// w pliku //infile_1// mają tę samą wartość co na polu //field_2// w pliku //infile_2// (pola w wierszu są oddzielane //separator//em). Oba pliki muszą być posortowane względem pola które jest używane jako klucz połączenia. | ||
| + | </small> | ||
| ''**fold** [-w //szer//] [//plik//]...'' wyświetla podane pliki (lub standardowe | ''**fold** [-w //szer//] [//plik//]...'' wyświetla podane pliki (lub standardowe | ||
| Linia 32: | Linia 36: | ||
| ''**od** [-t x1] …'', ''**hexdump** [-C] …'', i ''**xxd** …'' pokazują pliki binarnie. | ''**od** [-t x1] …'', ''**hexdump** [-C] …'', i ''**xxd** …'' pokazują pliki binarnie. | ||
| + | <small>(''od'' jest w standardzie POSIX, ''hexdump'' to narzędzie Linuksa, | ||
| + | ''xxd'' zwykle jest dystrybuowane z edytorem ''vim''.)</small> | ||
| ++++ Przykłady | {{page>so:redirects:cat&inline}} ++++ | ++++ Przykłady | {{page>so:redirects:cat&inline}} ++++ | ||
| Linia 56: | Linia 62: | ||
| ==== Wyświetlanie tekstu ==== | ==== Wyświetlanie tekstu ==== | ||
| - | ''**echo** //tekst//'' wypisuje //tekst// i znak nowej linii (to ostatnie można wyłączyć podając ''-n''). \\ | + | ''**echo** //tekst//'' wypisuje //tekst// i znak nowej linii. <small> ''echo'' jest |
| - | Przełącznik ''-e'' powoduje zamianę sekwencji takich jak ''\t'' czy ''\n'' na odpowiadające im znaki (tutaj: tab i nowa linia). | + | częścią standardu POSIX i jest też obecne w wielu nieuniksowych systemach. </small> |
| + | \\ | ||
| + | Większość implementacji ''echo'' implementuje przełącznik ''-n'' który pomija | ||
| + | dodawanie znaku nowej linii.\\ | ||
| + | Część implementacji zna też przełącznik ''-e'', który powoduje zamianę sekwencji | ||
| + | takich jak ''\t'' czy ''\n'' na odpowiadające im znaki (tutaj: tab i nowa linia). | ||
| + | Część implementacji zawsze zmienia sekwencje sterujące na odpowiadające im znaki | ||
| + | (i zgłasza błąd jeśli napotka przełącznik ''-e''). | ||
| ''**printf** //format// [//argument//]...'' działa jak funkcja ''printf'' z języka C (z pewnymi dodatkami). | ''**printf** //format// [//argument//]...'' działa jak funkcja ''printf'' z języka C (z pewnymi dodatkami). | ||
| <small> | <small> | ||
| + | W trakcie zajęć/w materiałach mogą pojawić się też programy: | ||
| + | \\ | ||
| ''**figlet** [//tekst//]'' wypisuje //tekst// (lub standardowe wejście) rysowane ascii-art'ową czcionką. | ''**figlet** [//tekst//]'' wypisuje //tekst// (lub standardowe wejście) rysowane ascii-art'ową czcionką. | ||
| + | \\ | ||
| ''**cowsay** [//tekst//]'' wyświetla krowę mówiącą //tekst// (lub standardowe wejście). | ''**cowsay** [//tekst//]'' wyświetla krowę mówiącą //tekst// (lub standardowe wejście). | ||
| </small> | </small> | ||
| Linia 69: | Linia 84: | ||
| ++++ Przykłady | {{page>so:redirects:echo&inline}} ++++ | ++++ Przykłady | {{page>so:redirects:echo&inline}} ++++ | ||
| - | ~~Zadanie.#~~ Sprawdź działanie ''echo -e 'foo\n\nbaz' '' \\ oraz ''echo -e '\n\n one \033[A \033[A two \033[B \033[B \n \033[1;31m red \033[0m' '' \\ <small>[[https://en.wikipedia.org/wiki/ANSI_escape_code|Sekwencje sterujące ANSI]] są dobrze opisane [[https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797|tutaj]]</small> | + | ~~Zadanie.#~~ Sprawdź działanie ''echo -e 'foo\n\nbaz' '' \\ oraz ''echo -e '\n\n one \033[A \033[A two \033[B \033[B \n \033[1;31m red \033[0m' '' \\ <small>[[https://en.wikipedia.org/wiki/ANSI_escape_code|Sekwencje sterujące ANSI]] są dobrze opisane [[https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797|tutaj]] oraz w podręczniku systemowym na stronie ''[[https://man7.org/linux/man-pages/man4/console_codes.4.html|console_codes]]''.</small> |
| ~~Zadanie.#~~ Sprawdź działanie ''printf "|%4.2f|%3s|%-16s|\n|%4.2f|%3s|%-16s|\n" 3.1428 pi obwod/srednica 9.8 g grawitacja'' | ~~Zadanie.#~~ Sprawdź działanie ''printf "|%4.2f|%3s|%-16s|\n|%4.2f|%3s|%-16s|\n" 3.1428 pi obwod/srednica 9.8 g grawitacja'' | ||
| Linia 137: | Linia 152: | ||
| ===== Przekierowania ===== | ===== Przekierowania ===== | ||
| - | Zgodne z POSIX-em powłoki potrafią zastąpić standardowe strumienie wskazanymi | + | Zgodne z POSIX-em powłoki potrafią zastąpić standardowe strumienie plikami wskazanymi |
| przez użytkownika. | przez użytkownika. | ||
| Linia 190: | Linia 205: | ||
| ''komenda << ogranicznik'' (here document) | ''komenda << ogranicznik'' (here document) | ||
| - | - przed uruchomieniem //komenda//, powłoka tworzy tymczasowy plik, | + | - przed uruchomieniem //komenda//, tworzy tymczasowy plik, |
| - | - powłoka czyta dane ze swojego standardowego wejścia linia po linii i wpisuje te linie do tymczasowego pliku, | + | - czyta dane ze swojego standardowego wejścia linia po linii i wpisuje te linie do tymczasowego pliku, \\ do momentu aż linia będzie składać się tylko z //ogranicznik//a, |
| - | - do momentu aż linia będzie składać się tylko z //ogranicznik//a, | + | |
| - otwiera tymczasowy plik do odczytu, | - otwiera tymczasowy plik do odczytu, | ||
| - zastępuje standardowe wejście plikiem. | - zastępuje standardowe wejście plikiem. | ||
| Linia 215: | Linia 229: | ||
| ==== Szczegóły ==== | ==== Szczegóły ==== | ||
| - | [[https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_07|Rozdział o przekierowaniach w standardzie POSIX]] \\ | + | [[https://pubs.opengroup.org/onlinepubs/9799919799/utilities/V3_chap02.html#tag_19_07|Rozdział o przekierowaniach w standardzie POSIX]] \\ |
| [[https://www.gnu.org/software/bash/manual/html_node/Redirections.html|Dokumentacja Basha o przekierowaniach]] | [[https://www.gnu.org/software/bash/manual/html_node/Redirections.html|Dokumentacja Basha o przekierowaniach]] | ||
| Linia 235: | Linia 249: | ||
| | ''>>'' | otwiera plik //słowo// do dopisywania i zastępuje //deskryptor_pliku// nowo otwartym | | | ''>>'' | otwiera plik //słowo// do dopisywania i zastępuje //deskryptor_pliku// nowo otwartym | | ||
| | ''<>'' | otwiera plik //słowo// do odczytu i zapisu, oraz zastępuje //deskryptor_pliku// nowo otwartym | | | ''<>'' | otwiera plik //słowo// do odczytu i zapisu, oraz zastępuje //deskryptor_pliku// nowo otwartym | | ||
| - | | ''<<'' | 1) tworzy tymczasowy plik \\ 2) czyta linię ze standardowego wejścia\\ 3) jeśli cała linia to dokładnie //słowo//, idź do 6 \\ 4) jeśli w //słowie// nie ma cudzysłowów (pary ''"'' lub <html><code>'</code></html>), wykonuje podstawienia((Np. pod ''$VAR'' podstawia wartość zmiennej ''VAR'', ''`date`'' jest zastąpione wynikiem komendy ''date'' etc.)) w linii \\ 5) pisze linię do pliku tymczasowego \\ 6) otwiera plik tymczasowy do odczytu \\ 7) zastępuje //deskryptor_pliku// nowo otwartym \\ 8) uruchamia komendę | | + | | ''<<'' | 1) tworzy tymczasowy plik \\ 2) czyta linię ze standardowego wejścia\\ 3) jeśli cała linia to dokładnie //słowo//, idź do 7 \\ 4) jeśli //słowo// nie było ujęte w cudzysłowy (pary ''"'' lub <html><code>'</code></html>), wykonuje podstawienia((Np. pod ''$VAR'' podstawia wartość zmiennej ''VAR'', ''`date`'' jest zastąpione wynikiem komendy ''date'' etc.)) w linii \\ 5) pisze linię do pliku tymczasowego \\ 6) wraca do 2 \\ 7) otwiera plik tymczasowy do odczytu \\ 8) zastępuje //deskryptor_pliku// nowo otwartym \\ 9) uruchamia komendę | |
| | ''<<-''| działa jak ''<<'', ale po kroku 2 dodaje jeszcze krok: \\ 2a) usuwa wszystkie początkowe tabulatory (''\t'') \\ uwaga: spacje nie są usuwane| | | ''<<-''| działa jak ''<<'', ale po kroku 2 dodaje jeszcze krok: \\ 2a) usuwa wszystkie początkowe tabulatory (''\t'') \\ uwaga: spacje nie są usuwane| | ||
| | ''<<<''| Uwaga: to jest rozszerzenie powłoki Bash \\ 1) tworzy tymczasowy plik \\ 2) pisze //słowo// do pliku tymczasowego \\ 3) pisze znak nowego wiersza do pliku tymczasowego \\ 4) otwiera plik tymczasowy do odczytu \\ 5) zastępuje //deskryptor_pliku// nowo otwartym \\ 6) uruchamia komendę | | | ''<<<''| Uwaga: to jest rozszerzenie powłoki Bash \\ 1) tworzy tymczasowy plik \\ 2) pisze //słowo// do pliku tymczasowego \\ 3) pisze znak nowego wiersza do pliku tymczasowego \\ 4) otwiera plik tymczasowy do odczytu \\ 5) zastępuje //deskryptor_pliku// nowo otwartym \\ 6) uruchamia komendę | | ||
| Linia 255: | Linia 269: | ||
| i zduplikuj standardowe wejście do standardowego wyjścia. Sprawdź co się stało. | i zduplikuj standardowe wejście do standardowego wyjścia. Sprawdź co się stało. | ||
| \\ | \\ | ||
| - | Uwaga: nie używaj ''<>'' dwukrotnie z z tym samym plikiem dla standardowego wejścia | + | Uwaga: nie używaj dwukrotnie ''<>'' z tym samym plikiem dla standardowego wejścia |
| - | i standardowego błędu (chyba że jesteś gotowy ponieść konsekwencje swojego czynu). | + | i standardowego wyjścia (chyba że jesteś gotowy ponieść konsekwencje swojego czynu). |
| </small> | </small> | ||