Różnice między wybraną wersją a wersją aktualną.
| Both sides previous revision Poprzednia wersja Nowa wersja | Poprzednia wersja | ||
|
so:variables_substitutions [2025/04/29 21:44] jkonczak |
so:variables_substitutions [2026/05/06 21:01] (aktualna) jkonczak [Ćwiczenia] |
||
|---|---|---|---|
| Linia 15: | Linia 15: | ||
| **Zmienne środowiskowe __nie__ są pomysłem powłoki, tylko systemu operacyjnego.** | **Zmienne środowiskowe __nie__ są pomysłem powłoki, tylko systemu operacyjnego.** | ||
| + | |||
| + | <small> | ||
| + | Programista ma dostęp do zmiennych środowiskowych praktycznie z każdego języka | ||
| + | programowania. | ||
| + | \\ | ||
| + | W językach C i %%C++%% jest to m. inn. funkcja | ||
| + | ''[[https://en.cppreference.com/c/program/getenv|char* getenv(const char* name)]]''. | ||
| + | |||
| + | W Linuksie można podejrzeć z jakimi zmiennymi środowiskowymi został uruchomiony | ||
| + | proces o identyfikatorze //pid// czytając plik ''%%/proc/%%//pid//%%/environ%%'' | ||
| + | (por. ''[[https://man7.org/linux/man-pages/man5/proc_pid_environ.5.html|man proc_pid_environ]]''). | ||
| + | </small> | ||
| ==== Zmienne w powłoce ==== | ==== Zmienne w powłoce ==== | ||
| Linia 97: | Linia 109: | ||
| ==== Wybrane standardowe zmienne ==== | ==== Wybrane standardowe zmienne ==== | ||
| - | |''PATH''|Lista oddzielonych dwukropkami ścieżek w których będą szukane programy \\ Np. żeby wykonać komendę ''ls'', powłoka szuka pliku o nazwie ''ls'' w ścieżkach z ''PATH''| | + | |''LOGNAME'' / ''USER'' \\ ''UID''|Nazwa bieżącego użytkownika \\ Numeryczny identyfikator bieżącego użytkownika| |
| |''HOME''|Katalog domowy bieżącego użytkownika| | |''HOME''|Katalog domowy bieżącego użytkownika| | ||
| - | |''PS1'' \\ ''PS2''|Podstawowy [[https://pl.wikipedia.org/wiki/Znak_zach%C4%99ty|znak zachęty]] (//prompt//) \\ Znak zachęty dla kolejnych linii komendy| | ||
| |''PWD''|Bieżący katalog roboczy| | |''PWD''|Bieżący katalog roboczy| | ||
| - | |''EDITOR''|Domyślny edytor tekstowy \\ Np. ''less'' przy otwarciu pliku do edycji skrótem ''v'' uruchamia ''$EDITOR //ścieżka_do_pliku//''| | + | |''PATH''|Lista oddzielonych dwukropkami ścieżek w których będą szukane programy \\ Np. żeby wykonać komendę ''date'', plik o nazwie ''date'' szukany jest w ścieżkach z ''PATH'' \\ <small>możesz to zaobserwować wykonując ''strace 3>&2 2>&1 1>&3 3>&- sh -c date | grep date''</small> | |
| - | |''LOGNAME'' / ''USER'' \\ ''UID''|Nazwa bieżącego użytkownika \\ Numeryczny identyfikator bieżącego użytkownika| | + | |
| |''LANG''|Język, region i kodowanie znaków; dla Polski zwykle ''pl_PL.UTF-8'' \\ np. ''de_CH.UTF-8'' oznacza niemiecki, Szwajcarię i kodowanie UTF-8| | |''LANG''|Język, region i kodowanie znaków; dla Polski zwykle ''pl_PL.UTF-8'' \\ np. ''de_CH.UTF-8'' oznacza niemiecki, Szwajcarię i kodowanie UTF-8| | ||
| - | |<small>''TERM''</small>|<small>Nazwa terminala określająca jego techniczne możliwości, takie jak ilość wspieranych kolorów, możliwość przesuwania kursora wstecz etc. Więcej w ''man 7 term'' ([[https://man7.org/linux/man-pages/man7/term.7.html|wersja online]]).</small>| | + | |''PS1'' \\ ''PS2''|Podstawowy [[https://pl.wikipedia.org/wiki/Znak_zach%C4%99ty|znak zachęty]] (//prompt//) \\ Znak zachęty dla kolejnych linii komendy| |
| + | |''EDITOR''|Domyślny edytor tekstowy \\ Np. ''less'' przy otwarciu pliku do edycji skrótem ''v'' uruchamia ''$EDITOR //ścieżka_do_pliku//''| | ||
| + | |<small>''TERM''</small>|<small>Nazwa terminala określająca jego techniczne możliwości, takie jak ilość wspieranych kolorów, możliwość przesuwania kursora wstecz etc. Więcej w ''[[https://man7.org/linux/man-pages/man7/term.7.html|man 7 term]]''.</small>| | ||
| |<small>''COLUMNS'' \\ ''LINES''</small>|<small>Liczba znaków mieszczący się na ekranie w wierszu (=kolumn) \\ Liczba wierszy (linii tekstu) mieszczących się na ekranie</small>| | |<small>''COLUMNS'' \\ ''LINES''</small>|<small>Liczba znaków mieszczący się na ekranie w wierszu (=kolumn) \\ Liczba wierszy (linii tekstu) mieszczących się na ekranie</small>| | ||
| |''RANDOM''|Losowa liczba (generowana na nowo przy każdym odwołaniu się do zmiennej)| | |''RANDOM''|Losowa liczba (generowana na nowo przy każdym odwołaniu się do zmiennej)| | ||
| Linia 127: | Linia 139: | ||
| ~~Zadanie.#~~ Zmień wartość zmiennej ''PS1''. | ~~Zadanie.#~~ Zmień wartość zmiennej ''PS1''. | ||
| - | ~~Zadanie.#~~ Spróbuj wykonać komendę ''lspci''. Zmień wartość zmiennej ''PATH'' | + | ~~Zadanie.#~~ Wykonaj komendę ''install -D /bin/vdir ~/mojeProgramy/listujPliki'' |
| - | tak, żeby zawierała ścieżki ''/sbin'' i ''/usr/sbin''. Ponownie spróbuj wykonać | + | (<small>która skopiuje plik ''/bin/vdir'' do katalogu ''~/mojeProgramy'' pod nazwę |
| - | komendę ''lspci''. | + | ''listujPliki'', automatycznie tworząc brakujące katalogi</small>). |
| + | Następnie spróbuj wykonać komendę ''listujPliki'' (<small>nie podając pełnej | ||
| + | ścieżki do tego programu</small>). Potem zmień wartość zmiennej ''PATH'' | ||
| + | tak, żeby zawierała ścieżkę ''~/mojeProgramy'' i ponownie spróbuj wykonać | ||
| + | komendę ''listujPliki''. | ||
| ====== Grupowanie poleceń i podstawienia ====== | ====== Grupowanie poleceń i podstawienia ====== | ||
| Linia 151: | Linia 166: | ||
| <li class="level2"><div class="li"></html> ''||'' – ''a || b'' wykona ''a'' i jeśli ''a'' zakończy się błędem, uruchomi ''b'' \\ ewaluuje do fałszu wtedy i tylko wtedy gdy ''a'' i ''b'' zakończą się błędem<html></div></li> | <li class="level2"><div class="li"></html> ''||'' – ''a || b'' wykona ''a'' i jeśli ''a'' zakończy się błędem, uruchomi ''b'' \\ ewaluuje do fałszu wtedy i tylko wtedy gdy ''a'' i ''b'' zakończą się błędem<html></div></li> | ||
| </ul> | </ul> | ||
| - | </html><small>Program kończy się powodzeniem jeśli wywoła ''exit(0);'' lub wykona ''return 0;'' w funkcji ''main''; inaczej kończy się błędem. </small> | + | </html><small>Program w C/C%%++%% kończy się powodzeniem jeśli wywoła ''exit(0);'' lub ''return 0;'' w funkcji ''main''; inaczej kończy się błędem. \\ Porównaj też z ''python -c 'exit(0)' && echo success || echo fail'' zmieniając potem ''0'' na inną wartość.</small> |
| Polecenia można grupować przez: | Polecenia można grupować przez: | ||
| Linia 226: | Linia 241: | ||
| |:::|**''/tmp/{ala,ma,kota}.txt''**|''/tmp/ala.txt /tmp/ma.txt /tmp/kota.txt''| | |:::|**''/tmp/{ala,ma,kota}.txt''**|''/tmp/ala.txt /tmp/ma.txt /tmp/kota.txt''| | ||
| |:::|''file{,.gz,.bzip2,.xz}''|''file file.gz file.bzip2 file.xz''| | |:::|''file{,.gz,.bzip2,.xz}''|''file file.gz file.bzip2 file.xz''| | ||
| + | |||
| + | //Uwaga:// w Bashu to podstawienie jest wykonywane przed innymi, w tym np. | ||
| + | __przed__ podstawianiem wartości zmiennych. | ||
| + | \\ | ||
| + | Dlatego np. <del>''{1..$X}''</del> nie jest zamieniane na liczby. | ||
| ~~Zadanie.#~~ Stwórz puste pliki ''plik_1'', ''plik_2'', ..., ''plik_9'' (używając nawiasów wąsatych do stworzenia listy plików). | ~~Zadanie.#~~ Stwórz puste pliki ''plik_1'', ''plik_2'', ..., ''plik_9'' (używając nawiasów wąsatych do stworzenia listy plików). | ||
| Linia 277: | Linia 297: | ||
| ~~Zadanie.#~~ Wpisz do zmiennej ''FILE'' nazwę pliku. Następnie wykonaj | ~~Zadanie.#~~ Wpisz do zmiennej ''FILE'' nazwę pliku. Następnie wykonaj | ||
| - | polecenie które zmieni nazwę tego pliku dodając na koniec rozszerzenie ''.txt''. | + | polecenie które zmieni nazwę pliku wskazanego przez zmienną ''FILE'' dodając na |
| + | koniec rozszerzenie ''.txt''. | ||
| ~~Zadanie.#~~ Czy rozwiązanie poprzedniego zadania zadziała dla nazwy pliku ze | ~~Zadanie.#~~ Czy rozwiązanie poprzedniego zadania zadziała dla nazwy pliku ze | ||