.\" -*- nroff -*- .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" This file is distributed under the same license as original manpage .\" Copyright of the original manpage: .\" Copyright © 1990-94,2000,2003-10 Free Software Foundation, Inc. (GPL-3+) .\" Copyright © of Polish translation: .\" Łukasz Kowalczyk (PTM) , 1998. .\" Robert Luberda , 2014. .TH XARGS 1 .SH NAZWA xargs \- wykonaj polecenie z argumentami pobranymi ze standardowego wejścia .SH SKŁADNIA \fBxargs\fP .nh [\fB\-0prtx\fP] [\fB\-E \fP\fIeof\-str\fP] [\fB\-e\fP[\fIeof\-str\fP]] [\fB\-\-eof\fP[=\fIeof\-str\fP]] [\fB\-\-null\fP] [\fB\-d \fP\fIdelimiter\fP] [\fB\-\-delimiter \fP\fIdelimiter\fP] [\fB\-I \fP\fIreplace\-str\fP] [\fB\-i\fP[\fIreplace\-str\fP]] [\fB\-\-replace\fP[=\fIreplace\-str\fP]] [\fB\-l\fP[\fImax\-lines\fP]] [\fB\-L \fP\fImax\-lines\fP] [\fB\-\-max\-lines\fP[=\fImax\-lines\fP]] [\fB\-n \fP\fImax\-args\fP] [\fB\-\-max\-args\fP=\fImax\-args\fP] [\fB\-s \fP\fImax\-chars\fP] [\fB\-\-max\-chars\fP=\fImax\-chars\fP] [\fB\-P \fP\fImax\-procs\fP] [\fB\-\-max\-procs\fP=\fImax\-procs\fP] [\fB\-\-interactive\fP] [\fB\-\-verbose\fP] [\fB\-\-exit\fP] [\fB\-\-no\-run\-if\-empty\fP] [\fB\-\-arg\-file\fP=\fIfile\fP] [\fB\-\-show\-limits\fP] [\fB\-\-version\fP] [\fB\-\-help\fP] [\fIpolecenie\fP [\fIpoczątkowe\-argumenty\fP]] .hy .SH OPIS Ta strona opisuje wersję GNU programu \fBxargs\fP. \fBxargs\fP czyta ze standardowego wejścia listę elementów rozdzielonych spacjami (argumenty je zawierające mogą być ujęte w pojedyncze lub podwójne cudzysłowy albo spacje w argumentach mogą być poprzedzone przez odwrotne ukośniki) lub znakami nowej linii. Następnie wykonywane jest \fIpolecenie\fP (domyślnie \fI/bin/echo\fP) jeden lub więcej razy z \fIargumentami\-początkowymi\fP, po których następują argumenty przeczytane ze standardowego wejścia. Puste linie ze standardowego wejścia są ignorowane. .P Ponieważ nazwy plików pod Uniksem mogą zawierać spacje i znaki nowej linii, to domyślne zachowanie jest często problematyczne: \fBxargs\fP niepoprawnie przetwarza pliki zawierające powyższe znaki. W takich sytuacjach lepiej jest używać opcji \fB\-0\fP, co zapobiega takim problemom. Podczas używania tej opcji należy się upewnić, że program, który przetwarza wejście dla \fBxargs\fP także używa znaku null jako separatora. Jeśli na przykład tym programem jest GNU \fBfind\fP, to odpowiednia opcja to \fB\-print0\fP. .P Jeśli uruchomione polecenia zakończy się z kodem 255, to \fBxargs\fP natychmiast przerwie swoje działanie bez czytania dalszego wejścia. Jeśli się to zdarzy, to na standardowym wyjściu błędów wypisywany jest komunikat błędu. .SH OPCJE .TP .PD 0 \fB\-\-arg\-file=\fP\fIfile\fP .TP .PD 0 \fB\-a \fP\fIfile\fP Czyta elementy z podanego pliku \fIfile\fP zamiast ze standardowego wejścia. Jeśli ta opcja jest używane, to standardowe wejście nie jest zmieniane podczas uruchamiania poleceń. W przeciwnym wypadku standardowe wejście jest przekierowywane z \fI/dev/null\fP. .TP .PD 0 \fB\-\-null\fP .TP .PD \fB\-0\fP Nazwy plików wejściowych są zakończone znakiem null zamiast spacją, a cudzysłowy i odwrotne ukośniki nie mają specjalnego znaczenia (wszystkie znaki są brane dosłownie). Łańcuch końca pliku jest traktowany jak każdy inny. Opcja jest użyteczna, gdy argumenty mogą zawierać białe znaki, cudzysłowy, apostrofy lub odwrotne ukośniki. Ta opcja może być użyta do pobrania argumentów od programu GNU \fBfind\fP uruchomionego z opcją \fB\-print0\fP. .TP .PD 0 \fB\-\-delimiter=\fP\fIdelim\fP .TP .PD \fB\-d\fP\fI delim\fP Elementy wejściowe są kończone podanym znakiem. Cudzysłowy i odwrotny ukośnik nie mają specjalnego znaczenia, każdy znak w wejściu jest brany literalnie. Łańcuch końca pliku jest traktowany jak każdy inny argument. Można użyć tej opcji, jeśli wejście składa się z elementów rozdzielonych znakami nowej linii, jednakże zawsze lepiej jest tak zaprojektować swój program, aby można było użyć opcji \fB\-\-null\fP, tam gdzie tylko jest to możliwe. Podany separator może być pojedynczym znakiem, kodem cytującym w stylu C, jak na przykład \fB\en\fP, albo dziesiętnym lub szesnastkowym kodem cytującym. Kody cytujące dziesiętne i szesnastkowe są rozumiane tak, jak to robi polecenie \fBprintf\fP. Znaki wielobajtowe nie są wspierane. .TP \fB\-E\fP\fI eof\-str\fP Nadaje łańcuchowi końca pliku wartość \fIeof\-str\fP. Jeżeli ciąg oznaczający koniec pliku pojawi się w jednej z linii wejściowych, reszta danych jest ignorowana. Jeśli nie użyto opcji \fB\-E\fP, ani \fB\-e\fP, to łańcuch końca pliku nie jest używany. .TP .PD 0 \fB\-\-eof\fP[\fI=eof\-str\fP] .TP .PD \fB\-e\fP[\fIeof\-str\fP] Opcja jest synonimem opcji \fB\-E\fP. Należy zamiast niej używać opcji \fB\-E\fP, ponieważ jest zgodna z POSIX\-em, podczas gdy ta opcja \(em nie jest. Jeśli pominięto \fIeof\-str\fP, to łańcuch końca pliku nie jest używany. Jeśli nie podano ani opcji \fB\-E\fP, ani opcji \fB\-e\fP, to łańcuch końca pliku nie jest używany. .TP \fB\-\-help\fP Podaje wszystkie opcje programu \fBxargs\fP i kończy działanie. .TP \fB\-I\fP\fI replace\-str\fP Zastępuje wszystkie wystąpienia \fIreplace\-str\fP w \fIpoczątkowych\-argumentach\fP argumentami przeczytanym ze standardowego wejścia. Ponadto, niecytowane odstępy nie separują argumentów, zamiast nich separatorem jest znak nowej linii. Automatycznie włączane są opcje \fB\-x\fP oraz \fB\-L\fP \fI1\fP. .TP .PD 0 \fB\-\-replace\fP[\fI=replace\-str\fP] .TP .PD \fB\-i\fP[\fIreplace\-str\fP] Opcja jest synonimem \fB\-I\fP\fIreplace\-str\fP, jeśli podano \fIreplace\-str\fP, lub synonimem \fB\-I\fP\fI{}\fP w przeciwnym wypadku. Opcja jest przestarzała, należy zamiast niej używać \fB\-I\fP. .TP \fB\-L\fP\fI max\-lines\fP Używa co najwyżej \fImax\-lines\fP niepustych linii danych wejściowych na każdy wiersz poleceń. Spacje na końcu linii powodują, że jest do niej dołączana następna linia. Automatycznie włączana jest opcja \fB\-x\fP. .TP .PD 0 \fB\-\-max\-lines\fP[=\fImax\-lines\fP] .TP .PD \fB\-l\fP[\fImax\-lines\fP] Synonim opcji \fB\-L\fP. W przeciwieństwie do \fB\-L\fP argument \fImax\-lines\fP jest opcjonalny; jeśli nie jest podany to jego wartością domyślną jest jeden. Opcja \fB\-l\fP jest przestarzała ponieważ standard POSIX wymienia \fB\-L\fP zamiast niej. .TP .PD 0 \fB\-\-max\-args\fP=\fImax\-args\fP .TP .PD \fB\-n\fP\fI max\-args\fP Używa co najwyżej \fImax\-args\fP argumentów na każdy wiersz poleceń. Może zostać użytych mniej argumentów niż \fImax\-args\fP, jeśli zostanie przekroczony ich rozmiar (patrz opcja \fB\-s\fP), chyba że podana jest opcja \fB\-x\fP, w którym to przypadku \fBdziałanie programu xargs zostanie zakończone\fP. .TP .PD 0 \fB\-\-interactive\fP .TP .PD \fB\-p\fP Prosi użytkownika o potwierdzenie przed uruchomieniem każdego wiersza poleceń i przeczytaniem danych z terminala. Uruchamia wiersz poleceń tylko wtedy, gdy odpowiedź zaczyna się od "y" lub "Y". Automatycznie włącza opcję \fB\-t\fP. .TP .PD 0 \fB\-\-no\-run\-if\-empty\fP .TP .PD \fB\-r\fP Jeżeli w danych ze standardowego wejścia nie znajdują się znaki inne niż spacje, polecenie nie jest uruchamiane. Normalnie polecenie jest uruchamiane jednorazowo, nawet gdy nie odczytano żadnych danych. Ta opcja jest rozszerzeniem GNU. .TP .PD 0 \fB\-\-max\-chars\fP=\fImax\-chars\fP .TP .PD \fB\-s\fP\fI max\-chars\fP Używa co najwyżej \fImax\-chars\fP znaków w każdej linii poleceń, włączając w to polecenie, argumenty początkowe oraz znaki null kończące każdy z łańcuchów argumentów. Największa możliwa wartość zależy od systemu i jest wyliczana jako limit długości argumentów wywołania \fBexec\fP(2) pomniejszony o rozmiar środowiska, następnie pomniejszony o 2048 bajtów. Jeśli wartość\ ta jest większa niż\ 128 KiB, to 128 KiB jest używane jako wartość\ domyślna, w przeciwnym wypadku wartością domyślną jest wyliczona wartość maksymalna. 1 KiB (kibibajt) to 1024 bajty. .TP .PD 0 \fB\-\-verbose\fP .TP .PD \fB\-t\fP Wiersz poleceń jest wypisywany na standardowe wyjście błędów przed wykonaniem polecenia. .TP \fB\-\-version\fP Wypisuje numer wersji \fIxargs\fP i kończy działanie programu. .TP \fB\-\-show\-limits\fP Wyświetla ograniczenia na długość linii wiersza poleceń, które są ustanawiane przez system operacyjny, przez \fBxargs\fP w przypadku rozmiaru wewnętrznego bufora lub przez opcję \fB\-s\fP. Aby \fBxargs\fP nie zrobił nic poza wyświetleniem ograniczeń, jego wejście powinno być przekierowane z \fI/dev/null\fP (i być może powinna być podana opcja \fB\-\-no\-run\-if\-empty\fP). .TP .PD 0 \fB\-\-exit\fP .TP .PD \fB\-x\fP Kończy działanie programu, jeżeli rozmiar zostanie przekroczony (patrz opcja \fB\-s\fP). .TP .PD 0 \fB\-\-max\-procs\fP=\fImax\-procs\fP .TP .PD \fB\-P\fP\fI max\-procs\fP Uruchamia co najwyżej \fImax\-procs\fP procesów za jednym razem; domyślną wartością jest 1. Jeżeli \fImax\-procs\fP jest równe 0, \fBxargs\fP uruchomi tyle procesów, ile to będzie możliwe za jednym razem. Opcji \fB\-P\fP należy używać razem z opcją \fB\-n\fP; w przeciwnym razie jest możliwe, że uruchomiony zostanie tylko jeden dodatkowy proces. .SH PRZYKŁADY .nf \fBfind /tmp \-name core \-type f \-print | xargs /bin/rm \-f\fP .fi Wyszukuje a następnie usuwa pliki o nazwie \fBcore\fP w katalogu \fB/tmp\fP i jego podkatalogach. Proszę zauważyć, że będzie to działać niepoprawnie jeśli którakolwiek z nazw plików zawiera znaki nowej linii lub spacji. .P \fBfind /tmp \-name core \-type f \-print0 | xargs \-0 /bin/rm \-f\fP .fi Wyszukuje a następnie usuwa pliki o nazwie \fBcore\fP w katalogu \fB/tmp\fP i jego podkatalogach. Nazwy plików są przetwarzane w taki sposób, że nazwy plików lub katalogów zawierające znaki spacji lub nowej linii są poprawnie obsługiwane. .P \fBfind /tmp \-depth \-name core \-type f \-delete\fP .fi Wyszukuje a następnie usuwa pliki o nazwie \fBcore\fP w katalogu \fB/tmp\fP i jego podkatalogach. Robi to jednak w sposób bardziej efektywny niż w poprzednim przykładzie (ponieważ nie używa \fBfork\fP(2) i \fBexec\fP(2), żeby uruchomić \fBrm\fP i nie potrzebuje dodatkowego procesu \fBxargs\fP). .P .nf \fBcut \-d: \-f1 < /etc/passwd | sort | xargs echo\fP .fi Tworzy zwięzła listę\ wszystkich użytkowników systemu. .P .nf \fBxargs sh \-c 'emacs "$@" < /dev/tty' emacs\fP .fi Uruchamia minimalną liczbę kopii Emacsa, jeden po drugim, potrzebną do edycji plików wymienionych na standardowym wejściu programu \fBxargs\fP. Przykład ten robi to samo, co opcja \fB\-o\fP z BSD, ale w sposób bardziej elastyczny i przenośny. .SH "KOD ZAKOŃCZENIA" \fBxargs\fP zwraca następujące kody wyjścia: .nf 0, gdy polecenie zakończyło się sukcesem 123, jeżeli którekolwiek wywołanie polecenia zakończyło się z kodem wyjścia 1\-125 124, jeżeli polecenie zakończyło się z kodem wyjścia 255 125, jeżeli polecenie zostało zakończone przez sygnał 126, jeżeli polecenie nie mogło być uruchomione 127, jeżeli polecenie nie zostało znalezione 1, jeżeli wystąpił inny błąd .fi .P Kody zakończenia większe od 128 są używane przez powłokę do wskazania, że program został zabity przez sygnał. .SH "ZGODNOŚĆ ZE STANDARDAMI" Według stanu na wersję\ 4.2.9 programu GNU xargs, domyślnie \fBxargs\fP nie używa logicznego znacznika końca pliku. Standard POSIX (IEEE Std 1003.1, edycja 2004) na to pozwala. .P Opcje \fB\-l\fP i \fB\-i\fP pojawiają się w wersji standardu POSIX z roku 1997, ale brak ich w wersji z roku 2004. Dlatego powinno się używać zamiast nich opcji \- odpowiednio \- \fB\-L\fP i \fB\-I\fP. .P Standard POSIX pozwala implementacjom na stosowanie limitu rozmiaru argumentów funkcji \fBexec\fP. Limit ten może wynosić tylko 4096 bajtów, włączając w to rozmiar środowiska. Przenośne skrypty nie mogą polegać na tym, że większa wartość jest obsługiwana. Jednakże nie znamy żadnej implementacji, w której to ograniczenie jest tak małe. Można użyć opcja \fB\-\-show\-limits\fP, aby wyświetlić ograniczenia mające zastosowanie do bieżącego systemu. .SH "ZOBACZ TAKŻE" \fBfind\fP(1), \fBlocate\fP(1), \fBlocatedb\fP(5), \fBupdatedb\fP(1), \fBfork\fP(2), \fBexecvp\fP(3), \fBFinding Files\fP (w dokumentacji Info lub wydane w druku) .SH BŁĘDY Opcja \fB\-L\fP nie jest kompatybilna z opcją\ \fB\-I\fP, choć najprawdopodobniej powinna być. .P Nie jest możliwe używanie \fBxargs\fP w sposób całkowicie bezpieczny, ponieważ zawsze istnieje dziura czasowa pomiędzy utworzeniem listy plików wejściowych i użyciem tej listy przez polecenia, które \fBxargs\fP wykonuje. Jeśli inni użytkownicy mają dostęp do systemu, to mogą zmienić stan systemu plików podczas tej dziury czasowej, tak żeby wymusić na poleceniach uruchomianych przez \fBxargs\fP wykonywanie akcji na plikach, które nie były zamierzone. Bardziej szczegółową dyskusję dotyczącą tego i podobnych problemów można znaleźć w rozdziale "Security Considerations" dokumentacji texinfo pakietu findutils. Opcja \fB\-execdir\fP polecenia \fBfind\fP często może stanowić bardziej bezpieczną alternatywę. Podczas używania opcji \fB\-I\fP każda przeczytana linia wejściowa jest wewnętrznie buforowana. Oznacza to, że istnieje górne ograniczenie długości linii wejściowych akceptowanych przez \fBxargs\fP z opcją\ \fB\-I\fP. Aby ominąć to ograniczenie można użyć opcji \fB\-s\fP do zwiększenia rozmiaru bufora używanego przez \fBxargs\fP oraz można także użyć dodatkowego wywołania \fBxargs\fP, by zapewnić, że bardzo długie linie się nie pojawią. Na przykład: .P \fBjakieśpolecenie | xargs \-s 50000 echo | xargs \-I '{}' \-s 100000 rm '{}'\fP .P Powyższe pierwsze wywołanie \fBxargs\fP nie ma ograniczenia na długość linii wejściowej, ponieważ nie używa opcji \fB\-i\fP. Drugie wywołanie \fBxargs\fP ma takie ograniczenia, ale zapewniliśmy, że nigdy nie wystąpi linia dłuższa niż obsługiwana. Nie jest to idealne rozwiązanie. Zamiast tego opcja \fB\-i\fP nie powinna wymuszać ograniczenia na długość linii \(em dlatego też ten opis pojawia się w rozdziale BŁĘDY. Problem nie występuje jeśli wejście pochodzi z programu \fBfind\fP(1), ponieważ wypisuje on tylko jedną nazwę pliku w linii. .P Najlepszą drogą do zgłoszenia błędu jest użycie formularza na stronie http://savannah.gnu.org/bugs/?group=findutils. Możliwe jest wówczas śledzenie postępu naprawiania błędu. Pozostałe komentarze dotyczące \fBxargs\fP(1) i ogólne, dotyczące pakietu findutils, można wysyłać na listę dyskusyjną \fIbug\-findutils\fP. Aby się na nią zapisać, proszę wysłać e\-mail do \fIbug\-findutils\-request@gnu.org\fP. .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Łukasz Kowalczyk (PTM) i Robert Luberda . .PP Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją \fB 4.4.2 \fPoryginału.