XARGS(1) General Commands Manual XARGS(1) NUME xargs - construiete i executa linii de comanda de la intrarea standard REZUMAT xargs [opiuni] [comanda [argumente-iniiale]] DESCRIERE Aceasta pagina de manual documenteaza versiunea GNU a xargs. xargs citete elemente de la intrarea standard, delimitate de spaii libere (care pot fi protejate cu ghilimele duble sau simple sau cu o bara oblica inversa) sau de linii noi, i executa comanda (implicit echo) de una sau mai multe ori cu orice argumente-iniiale urmate de elemente citite de la intrarea standard. Liniile goale de la intrarea standard sunt ignorate. Linia de comanda pentru comanda este construita pana cand atinge o limita definita de sistem (cu excepia cazului in care se utilizeaza opiunile -n i -L). comanda specificata va fi invocata de cate ori este necesar pentru a epuiza lista de elemente de intrare. In general, vor exista mult mai puine invocari ale comenzii decat numarul elementelor de intrare. In mod normal, acest lucru va avea beneficii semnificative in materie de performana. Unele comenzi pot fi executate in paralel; a se vedea opiunea -P. Deoarece numele de fiiere Unix pot conine spaii libere i linii noi, acest comportament implicit este adesea problematic; numele de fiiere care conin spaii libere i/sau linii noi sunt procesate incorect de xargs. In aceste situaii, este mai bine sa se utilizeze opiunea -0, care previne astfel de probleme. Atunci cand utilizai aceasta opiune, va trebui sa va asigurai ca programul care produce datele de intrare pentru xargs utilizeaza, de asemenea, un caracter nul ca separator. Daca acest program este GNU find, de exemplu, opiunea -print0 face acest lucru pentru dumneavoastra. Daca orice invocare a comenzii iese cu starea 255, xargs se va opri imediat fara a citi alte date de intrare. Un mesaj de eroare este emis la ieirea de eroare standard atunci cand se intampla acest lucru. OPIUNI -0, --null Elementele de intrare se termina cu un caracter nul in loc de spaiu alb, iar ghilimelele i bara inversa nu sunt speciale (fiecare caracter este luat literal). Dezactiveaza irul de sfarit de fiier, care este tratat ca orice alt argument. Utila atunci cand elementele de intrare pot conine spaii albe, ghilimele sau bare oblice inverse. Opiunea GNU <> produce date de intrare adecvate pentru acest mod. -a fiier, --arg-file=fiier Citete elemente din fiier in loc de la intrarea standard. Daca utilizai aceasta opiune, intrarea standard ramane neschimbata atunci cand se executa comenzile. In caz contrar, intrarea standard este redirecionata catre /dev/null. --delimiter=delimitator, -d delimitator Elementele de intrare se termina cu caracterul specificat. Delimitatorul specificat poate fi un singur caracter, un caracter de eludare in stil C, cum ar fi \n, sau un cod de eludare octal sau hexazecimal. Codurile de eludare octale i hexazecimale se ineleg ca i in cazul comenzii printf. Caracterele multi-octet nu sunt acceptate. La procesarea datelor de intrare, ghilimelele i barele oblice inverse nu sunt speciale; fiecare caracter din datele de intrare este luat literal. Opiunea -d dezactiveaza orice ir de sfarit de fiier, care este tratat ca orice alt argument. Putei utiliza aceasta opiune atunci cand datele de intrare constau doar in elemente separate prin linii noi, dei este aproape intotdeauna mai bine sa va proiectai programul pentru a utiliza --null atunci cand acest lucru este posibil. -E ir-eof Stabilete irul de sfarit de fiier la ir-eof. In cazul in care irul de sfarit de fiier apare ca linie de intrare, restul intrarii este ignorat. Daca nu se utilizeaza nici -E, nici -e, nu se utilizeaza irul de sfarit de fiier. -e[ir-eof], --eof[=ir-eof] Aceasta opiune este sinonima cu opiunea -E. Utilizai -E in schimb, deoarece este conforma cu POSIX, in timp ce aceasta opiune nu este. Daca ir-eof este omis, nu exista un ir de sfarit de fiier. Daca nu se utilizeaza nici -E, nici -e, nu se utilizeaza irul de sfarit de fiier. -I ir-inlocuire Inlocuiete apariiile lui ir-inlocuire in argumentele iniiale cu nume citite de la intrarea standard. De asemenea, spaiile libere fara ghilimele nu termina elementele de intrare; in schimb, separatorul este caracterul de linie noua. Implica -x i -L 1. -i[ir-inlocuire], --replace[=ir-inlocuire] Aceasta opiune este un sinonim pentru -Iir-inlocuire daca se specifica ir-inlocuire. Daca lipsete argumentul ir-inlocuire, efectul este acelai ca i in cazul -I{}. Aceasta opiune este depreciata; utilizai -I in locul ei. -L max-linii Utilizeaza cel mult max-linii linii de intrare fara spaii libere pe fiecare linie de comanda. Liniile goale la sfarit determina continuarea logica a unei linii de intrare pe urmatoarea linie de intrare. Implica -x. -l[max-linii], --max-lines[=max-linii] Sinonim pentru opiunea -L. Spre deosebire de -L, argumentul max-linii este opional. Daca max-linii nu este specificat, valoarea implicita este 1. Opiunea -l este depreciata, deoarece standardul POSIX specifica in schimb -L. -n max-arg, --max-args=max-arg Utilizeaza cel mult max-arg argumente pe linie de comanda. Se vor utiliza mai puine argumente decat max-arg daca se depaete dimensiunea (a se vedea opiunea -s), cu excepia cazului in care se da opiunea -x, caz in care se va iei din xargs.. -P max-proc, --max-procs=max-proc Ruleaza pana la max-proc procese la un moment dat; valoarea implicita este 1. Daca max-proc este 0, xargs va rula cat mai multe procese posibile la un moment dat. Folosii opiunea -n sau opiunea -L cu -P; in caz contrar, exista anse sa se execute doar o singura execuie. In timp ce xargs ruleaza, putei trimite procesului sau un semnal SIGUSR1 pentru a crete numarul de comenzi care vor fi executate simultan sau un SIGUSR2 pentru a reduce numarul. Nu il putei crete peste o limita definita de implementare (care este afiata cu --show-limits). Nu se poate scadea sub 1. xargs nu-i termina niciodata comenzile; atunci cand i se cere sa scada numarul de comenzi, ateapta doar ca mai multe comenzi existente sa se termine inainte de a incepe o alta. Reinei ca este de competena proceselor apelate sa gestioneze in mod corespunzator accesul paralel la resursele partajate. De exemplu, daca mai multe dintre ele incearca sa imprime la ieirea standard (stdout), ieirile vor fi produse intr-o ordine nedeterminata (i foarte probabil amestecate), cu excepia cazului in care procesele colaboreaza in vreun fel pentru a preveni acest lucru. Folosirea unei scheme de blocare este o modalitate de a preveni astfel de probleme. In general, utilizarea unei scheme de blocare va contribui la asigurarea unei ieiri corecte, dar va reduce performana. Daca nu dorii sa tolerai diferena de performana, aranjai pur i simplu ca fiecare proces sa produca un fiier de ieire separat (sau sa utilizeze in alt mod resurse separate). -o, --open-tty Redeschide intrarea standard ca /dev/tty in procesul copil inainte de a executa comanda. Acest lucru este util daca dorii ca xargs sa ruleze o aplicaie interactiva. -p, --interactive Intreaba utilizatorul daca dorete sa execute fiecare linie de comanda i sa citeasca o linie din terminal. Executa linia de comanda numai daca raspunsul incepe cu ,,y" sau ,,Y". Implica -t. --process-slot-var=nume Stabilete variabila de mediu nume la o valoare unica in fiecare proces copil care ruleaza. Valorile sunt refolosite odata ce procesele copil ies. Acest lucru poate fi utilizat, de exemplu, intr-o schema rudimentara de distribuie a sarcinii. -r, --no-run-if-empty In cazul in care intrarea standard nu conine niciun spaiu in alb, nu executa comanda. In mod normal, comanda este executata o singura data, chiar daca nu exista nicio intrare. Aceasta opiune este o extensie GNU. -s max-caractere, --max-chars=max-caractere Utilizeaza cel mult max-caractere caractere pe linie de comanda, inclusiv comanda i argumentele iniiale, precum i caracterele nule de terminare de la capetele irurilor de argumente. Cea mai mare valoare permisa depinde de sistem i este calculata ca fiind limita de lungime a argumentelor pentru <>, minus dimensiunea mediului dumneavoastra, minus 2048 de octei de spaiu de manevra. Daca aceasta valoare este mai mare de 128KiB, se utilizeaza 128Kib ca valoare implicita; in caz contrar, valoarea implicita este cea maxima. 1KiB reprezinta 1024 de octei. xargs se adapteaza automat la constrangeri mai stricte. --show-limits Afieaza limitele de lungime a liniei de comanda care sunt impuse de sistemul de operare, de dimensiunea memoriei tampon aleasa de xargs i de opiunea -s. Canalizai intrarea catre /dev/null (i poate specificai --no-run-if-empty) daca nu dorii ca xargs sa faca ceva. -t, --verbose Afieaza linia de comanda la ieirea de eroare standard inainte de a o executa. -x, --exit Iese in cazul in care dimensiunea (a se vedea opiunea -s) este depaita. --help Afieaza un rezumat al opiunilor lui xargs i iese. --version Afieaza numarul versiunii xargs i iese. Opiunile --max-lines (-L, -l), --replace (-I, -i) i --max-args (-n) se exclud reciproc. Daca unele dintre ele sunt specificate in acelai timp, atunci xargs va utiliza, in general, opiunea specificata ultima in linia de comanda, adica va restaura valoarea opiunii incriminate (data inainte) la valoarea sa implicita. In plus, xargs va emite un diagnostic de avertizare la ieirea de eroare standard. Excepia de la aceasta regula este ca valoarea speciala max-arg 1 (,,-n1") este ignorata dupa opiunea --replace i alias-urile sale -I i -i, deoarece nu ar intra de fapt in conflict. EXEMPLE find /tmp -name core -type f -print | xargs /bin/rm -f Gasete fiierele cu numele core in sau sub directorul /tmp i le terge. Reinei ca acest lucru va funciona incorect daca exista nume de fiiere care conin linii noi sau spaii. find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Gasete fiierele numite core in sau sub directorul /tmp i le terge, procesand numele de fiiere astfel incat numele de fiiere sau directoare care conin spaii sau linii noi sa fie tratate corect. find /tmp -depth -name core -type f -delete Gasete fiierele numite core in sau sub directorul /tmp i le terge, dar mai eficient decat in exemplul anterior (deoarece se evita necesitatea de a utiliza fork(2) i exec(2) pentru a lansa rm i nu avem nevoie de procesul suplimentar xargs). cut -d: -f1 < /etc/passwd | sort | xargs echo Genereaza o lista compacta a tuturor utilizatorilor din sistem. STARE DE IEIRE xargs iese cu urmatoarea stare: 0 daca reuete 123 daca orice invocare a comenzii a ieit cu starea 1-125 124 daca comanda a ieit cu starea 255 125 daca comanda este omorata de un semnal 126 daca comanda nu poate fi executata 127 daca comanda nu este gasita 1 in cazul in care s-a produs o alta eroare. Codurile de ieire mai mari de 128 sunt utilizate de shell pentru a indica faptul ca un program a murit din cauza unui semnal fatal. CONFORMAREA CU STANDARDELE Incepand cu versiunea 4.2.9 a GNU xargs, comportamentul implicit al xargs este de a nu avea un marcaj logic de sfarit de fiier. POSIX (IEEE Std 1003.1, ediia 2004) permite acest lucru. Opiunile ,,-l" i ,,-i" apar in versiunea din 1997 a standardului POSIX, dar nu apar in versiunea din 2004 a standardului. Prin urmare, ar trebui sa utilizai in schimb ,,-L" i, respectiv, ,,-I". Opiunea ,,-o" este o extensie a standardului POSIX pentru o mai buna compatibilitate cu BSD. Standardul POSIX permite implementarilor sa aiba o limita privind dimensiunea argumentelor pentru funciile exec. Aceasta limita poate fi de pana la 4096 octei, inclusiv dimensiunea mediului. Pentru ca scripturile sa fie portabile, acestea nu trebuie sa se bazeze pe o valoare mai mare. Cu toate acestea, nu cunosc nicio implementare a carei limita reala sa fie atat de mica. Opiunea --show-limits poate fi utilizata pentru a descoperi limitele reale in vigoare pe sistemul actual. ERORI Nu este posibil ca xargs sa fie utilizat in sigurana, deoarece va exista intotdeauna un interval de timp intre producerea listei de fiiere de intrare i utilizarea lor in comenzile pe care xargs le emite. Daca ali utilizatori au acces la sistem, acetia pot manipula sistemul de fiiere in timpul acestui interval de timp pentru a fora aciunea comenzilor pe care xargs le executa sa se aplice unor fiiere pe care nu le-ai intenionat. Pentru o discuie mai detaliata a acestei probleme i a problemelor conexe, consultai capitolul ,,Security Considerations" din documentaia findutils Texinfo. Opiunea -execdir din find poate fi adesea utilizata ca o alternativa mai sigura. Atunci cand utilizai opiunea -I, fiecare linie citita de la intrare este pusa in memoria tampon interna. Aceasta inseamna ca exista o limita superioara a lungimii liniei de intrare pe care xargs o va accepta atunci cand este utilizata cu opiunea -I. Pentru a ocoli aceasta limitare, putei utiliza opiunea -s pentru a mari spaiul de tampon pe care il utilizeaza xargs i putei utiliza, de asemenea, o invocare suplimentara a xargs pentru a va asigura ca nu apar linii foarte lungi. De exemplu: vreo-comanda | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}' Aici, prima invocare a xargs nu are o limita de lungime a liniei de intrare, deoarece nu utilizeaza opiunea -i. A doua invocare a xargs are o astfel de limita, dar ne-am asigurat ca nu intalnete niciodata o linie mai lunga decat poate gestiona. Aceasta nu este o soluie ideala. In schimb, opiunea -i nu ar trebui sa impuna o limita de lungime a liniei, motiv pentru care aceasta discuie apare in seciunea ERORI. Problema nu apare la ieirea lui find(1), deoarece acesta emite doar un nume de fiier pe linie. RAPORTAREA ERORILOR Ajutor in internet pentru GNU findutils: . Raportai orice erori de traducere la: Raportai orice alta problema prin intermediul formularului de la sistemul de urmarire a erorilor al GNU Savannah: Subiectele generale despre pachetul GNU findutils sunt discutate pe lista de discuii bug-findutils: DREPTURI DE AUTOR Drepturi de autor (C) 1990-2022 Free Software Foundation, Inc. Licena GPLv3+: GNU GPL versiunea 3 sau ulterioara . Acesta este software liber: suntei liber sa-l modificai i sa-l redistribuii. Nu exista NICIO GARANIE, in limitele prevazute de lege. CONSULTAI I find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7) Documentaia completa este disponibila la . sau local prin intermediul comenzii: info xargs TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . XARGS(1)