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

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
so/variables_substitutions.1745955857.txt.gz · ostatnio zmienione: 2025/04/29 21:44 przez jkonczak