Narzędzia użytkownika

Narzędzia witryny


so:variables_substitutions

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Poprzednia rewizja po obu stronachPoprzednia wersja
Nowa wersja
Poprzednia wersja
so:variables_substitutions [2025/04/29 19:44] – jkonczakso:variables_substitutions [2026/05/06 19:01] (aktualna) – [Ćwiczenia] jkonczak
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
so/variables_substitutions.1745955857.txt.gz · ostatnio zmienione: (edycja zewnętrzna)