Narzędzia użytkownika

Narzędzia witryny


so:funkcje_trap_xargs

Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
so:funkcje_trap_xargs [2023/05/29 12:36]
jkonczak [POSIX shell]
so:funkcje_trap_xargs [2025/05/19 19:28] (aktualna)
jkonczak
Linia 3: Linia 3:
 ==== POSIX shell ==== ==== POSIX shell ====
  
-Aby zdefiniować [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html#​tag_18_09_05|funkcję]] w powłoce, należy użyć składni +Aby zdefiniować [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_09_05|funkcję]] w powłoce, należy użyć składni 
-''​**//​nazwa//​() //​treść//​**'',​ gdzie //treść// powinna być [[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html#​tag_18_09_04|złożoną komendą]]+''​**//​nazwa//​() //​treść//​**'',​ gdzie //treść// powinna być [[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_09_04|złożoną komendą]]
 (np. poleceniami zamkniętymi w ''​{ … }''​). (np. poleceniami zamkniętymi w ''​{ … }''​).
 \\ \\
Linia 130: Linia 130:
 ===== Obsługa sygnałów ===== ===== Obsługa sygnałów =====
  
-Komendą ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html#​tag_18_28|trap]] //​polecenie//​ //​SYGNAŁ//''​+Komendą ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_29|trap]] //​polecenie//​ //​SYGNAŁ//''​
 można ustawić obsługę podanego //​SYGNAŁ//​u oraz, podając zamiast nazwy sygnału można ustawić obsługę podanego //​SYGNAŁ//​u oraz, podając zamiast nazwy sygnału
 słowo EXIT, ustawić polecenie do wykonania bezpośrednio przed zakończeniem słowo EXIT, ustawić polecenie do wykonania bezpośrednio przed zakończeniem
Linia 144: Linia 144:
 \\ \\
 Składnia ''​trap - //​SYGNAŁ//''​ przywraca domyślną obsługę sygnału. Składnia ''​trap - //​SYGNAŁ//''​ przywraca domyślną obsługę sygnału.
 +
 +<​HTML>​
 +<p style="​margin-bottom:​ 0">
 +Zwróć uwagę na to, jakie znaczenie ma użycie pojedynczych bądź podwójnych
 +cudzysłowów przy podawaniu polecenia:
 +</p>
 +<pre style="​line-height:​ 100%;​margin:​ 0">
 +<span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ cat trap.sh
 +#!/bin/sh
 +X=bogus
 +trap &​apos;​printf &​quot;​single quotes: &quot;; echo $X&​apos;​ USR1
 +trap &​quot;​printf &​apos;​double quotes: &apos;; echo $X&​quot;​ USR2
 +for X in 1 2 3; do
 +  sleep 1
 +done
 +<span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ ./trap.sh &amp; sleep 2; kill -USR1 $!; kill -USR2 $!; wait
 +[1] 25178
 +single quotes: 2
 +double quotes: bogus
 +[1]+  Zakończono ​            ​./​trap.sh
 +<span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​
 +</​pre>​
 +</​HTML>​
 +Dla czytelności i wygody często pisze się funkcję dla obsługi zdarzenia
 +i podaje jej wywołanie w komendzie ''​trap''​.
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 162: Linia 187:
 === source === === source ===
  
-Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html#​tag_18_18|.]]  //​plik//''​ (i komenda ''​source //​plik//''​ w Bashu) uruchamiają+Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_19|.]]  //​plik//''​ (i komenda ''​source //​plik//''​ w Bashu) uruchamiają
 polecenia z podanego pliku w bieżącej powłoce (tzn. tak jakby były wpisane z klawiatury). polecenia z podanego pliku w bieżącej powłoce (tzn. tak jakby były wpisane z klawiatury).
  
Linia 177: Linia 202:
 === eval i exec === === eval i exec ===
  
-Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html#​tag_18_19|eval]]''​+Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_20|eval]]''​
 wykonuje podaną jako tekst komendę. ​ wykonuje podaną jako tekst komendę. ​
  
-Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​V3_chap02.html#​tag_18_20|exec]]''​+Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​V3_chap02.html#​tag_19_21|exec]]''​
 zawierająca tylko przekierowania ustawia podane przekierowania dla powłoki (było zawierająca tylko przekierowania ustawia podane przekierowania dla powłoki (było
 przy okazji przekierowań),​ natomiast z podaną komendą zastępuje powłokę podanym przy okazji przekierowań),​ natomiast z podaną komendą zastępuje powłokę podanym
 poleceniem. poleceniem.
 +
 +<​HTML>​
 +<pre style="​line-height:​100%">​
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ X=2  Y=X  Z=\$$Y
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ echo $Z
 +$X
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ eval &​quot;​echo $Z&​quot;​
 +2
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ echo $$
 +27197
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ sh
 +sh-5.2$ echo $$
 +27224
 +sh-5.2$ exit
 +exit
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ echo $$
 +27197
 +<span style="​font-weight:​bold;​color:#​7f7f7f;"></​span><​span style="​font-weight:​bold;​color:#​00ff00;">​user&#​64;​host</​span><​span style="​font-weight:​bold;​color:#​5c5cff;">​ ~ $</​span>​ exec sh
 +sh-5.2$ echo $$
 +27197
 +</​pre></​HTML>​
  
 ~~Zadanie.#​~~ ~~Zadanie.#​~~
Linia 204: Linia 250:
 === basename i dirname === === basename i dirname ===
  
-Program ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​basename.html#tag_20_07|basename]] //​ścieżka//​ [//​rozszerzenie//​]''​ wypisuje na standardowe wyjście nazwę pliku+Program ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​basename.html|basename]] //​ścieżka//​ [//​rozszerzenie//​]''​ wypisuje na standardowe wyjście nazwę pliku
 wskazanego ścieżką, opcjonalnie usuwając z nazwy //​rozszerzenie//​. wskazanego ścieżką, opcjonalnie usuwając z nazwy //​rozszerzenie//​.
  
-Program ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​dirname.html#tag_20_35|dirname]] //​ścieżka//''​ wypisuje na standardowe wyjście katalog w którym znajduje się plik +Program ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​dirname.html|dirname]] //​ścieżka//''​ wypisuje na standardowe wyjście katalog w którym znajduje się plik 
 wskazany ścieżką. wskazany ścieżką.
  
Linia 220: Linia 266:
 === fc === === fc ===
  
-Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​fc.html#tag_20_44|fc]]''​ tworzy plik tymczasowy, wstawia do niego poprzednią komendę z historii, otwiera+Komenda ''​[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​fc.html|fc]]''​ tworzy plik tymczasowy, wstawia do niego poprzednią komendę z historii, otwiera
 ten plik w edytorze tekstu, a po zamknięciu edytora wykonuje poprawioną komendę. ten plik w edytorze tekstu, a po zamknięciu edytora wykonuje poprawioną komendę.
  
Linia 249: Linia 295:
   * ''​$TABLICA''​ podstawi wartość elementu pod indeksem 0   * ''​$TABLICA''​ podstawi wartość elementu pod indeksem 0
   * ''​${TABLICA[//​indeks//​]}''​ podstawi wartość elementu pod indeksem //indeks//   * ''​${TABLICA[//​indeks//​]}''​ podstawi wartość elementu pod indeksem //indeks//
-  * ''​${TABLICA[@]}''​ podstawi wszystkie wartości w tablicy  +  * ''​${TABLICA[@]}''​ podstawi wszystkie wartości w tablicy 
-  * ''​${!TABLICA[@]}''​ podstawi wszystkie indeksy w tablicy ​+  * ''​${!TABLICA[@]}''​ podstawi wszystkie indeksy w tablicy
   * ''​${#​TABLICA[@]}''​ podstawi ilość elementów   * ''​${#​TABLICA[@]}''​ podstawi ilość elementów
 +Zamknięcie w podwójny cudzysłów wyrażeń ''"​${TABLICA[@]}"''​ i ''"​${!TABLICA[@]}"''​
 +działa tak jakby została w to miejsce podstawiona każda wartość osobno zamknięta
 +w podwójny cudzysłów.
   ​   ​
 ==== Asocjacyjne ==== ==== Asocjacyjne ====
Linia 270: Linia 319:
 ==== xargs ==== ==== xargs ====
  
-Program ''​**[[https://​pubs.opengroup.org/​onlinepubs/​9699919799/​utilities/​xargs.html#tag_20_158|xargs]]** //​program//''​ czyta ze standardowego wejścia kolejne nazwy i wykonuje+Program ''​**[[https://​pubs.opengroup.org/​onlinepubs/​9799919799/​utilities/​xargs.html|xargs]]** //​program//''​ czyta ze standardowego wejścia kolejne nazwy i wykonuje
 ''//​program//''​ z tymi nazwami jako argumentem. ''//​program//''​ z tymi nazwami jako argumentem.
 \\ \\
Linia 306: Linia 355:
 co powoduje problemy np. ze spacjami. co powoduje problemy np. ze spacjami.
 \\ \\
-Większość implementacji polecenia ''​xargs''​ rozumie przełącznik ''​-0''​+Większość implementacji polecenia ''​xargs''​ rozumie przełącznik ''​-0''​((Przełącznik 
 +''​-0''​ dla programu ''​xargs''​ stał się częścią standardu POSIX od 2024 roku.))
 rozdzielający nazwy znakiem ''​\0'':​ rozdzielający nazwy znakiem ''​\0'':​
 <​html><​pre style="​line-height:​1em">​ <​html><​pre style="​line-height:​1em">​
so/funkcje_trap_xargs.txt · ostatnio zmienione: 2025/05/19 19:28 przez jkonczak