GETOPT(1) Comenzi utilizator GETOPT(1) NUME getopt - analizeaza op<?>iunile de comanda (imbunata<?>it) REZUMAT getopt <?>ir-op<?>iuni parametri getopt [op<?>iuni] [--] <?>ir-op<?>iuni parametri getopt [op<?>iuni] -o|--options <?>ir-op<?>iuni [op<?>iuni] [--] parametri DESCRIERE getopt este utilizat pentru a descompune (analiza) op<?>iunile din liniile de comanda pentru o analiza u<?>oara de catre procedurile shell <?>i pentru a verifica daca op<?>iunile sunt valide. In acest scop, utilizeaza rutinele GNU getopt(3). Parametrii cu care este apelat getopt pot fi impar<?>i<?>i in doua par<?>i: op<?>iunile care modifica modul in care getopt va efectua analiza ( op<?>iuni <?>i <?>ir-op<?>iuni din REZUMAT) <?>i parametrii care trebuie analiza<?>i ( parametri din REZUMAT). A doua parte va incepe de la primul parametru care nu este un argument de op<?>iune sau dupa prima apari<?>ie a lui ,,--". In cazul in care in prima parte nu se gase<?>te nicio op<?>iune ,,-o" sau ,,--op<?>iuni", primul parametru din a doua parte este utilizat ca <?>ir scurt de op<?>iuni. Daca este definita variabila de mediu GETOPT_COMPATIBLE sau daca primul parametru nu este o op<?>iune (nu incepe cu un ,,-", primul format din REZUMAT), getopt va genera o ie<?>ire compatibila cu cea a altor versiuni ale getopt(1). Acesta va efectua in continuare amestecarea parametrilor <?>i va recunoa<?>te argumentele op<?>ionale (a se vedea sec<?>iunea COMPATIBILITATE pentru mai multe informa<?>ii). Implementarile tradi<?>ionale ale getopt(1) nu sunt capabile sa faca fa<?>a spa<?>iilor albe <?>i altor caractere speciale (specifice shell-ului) in argumente <?>i in parametrii non-op<?>iune. Pentru a rezolva aceasta problema, aceasta implementare poate genera o ie<?>ire inchisa intre ghilimele care trebuie din nou interpretata de shell (de obicei prin utilizarea comenzii eval). Acest lucru are ca efect pastrarea acelor caractere, dar trebuie sa apela<?>i getopt intr-un mod care nu mai este compatibil cu alte versiuni (al doilea sau al treilea format din REZUMAT). Pentru a determina daca aceasta versiune imbunata<?>ita a getopt(1) este instalata, se poate utiliza o op<?>iune speciala de testare (-T). OP<?>IUNI -a, --alternative Permite ca op<?>iunile lungi sa inceapa cu o singura ,,-". -l, --longoptions op<?>iuni-lungi Op<?>iunile lungi (cu mai multe caractere) care trebuie recunoscute. Se pot specifica mai multe nume de op<?>iuni in acela<?>i timp, separand numele cu virgule. Aceasta op<?>iune poate fi data de mai multe ori, op<?>iuni-lungi sunt cumulative. Fiecare nume de op<?>iune lunga din op<?>iuni-lungi poate fi urmat de doua puncte ,,:" pentru a indica ca are un argument obligatoriu <?>i de doua puncte duble ,,::" pentru a indica ca are un argument op<?>ional. -n, --name nume-program Numele care va fi utilizat de rutinele getopt(3) atunci cand raporteaza erori. Re<?>ine<?>i ca erorile din getopt(1) sunt in continuare raportate ca provenind de la getopt. -o, --options op<?>iuni-scurte Op<?>iunile scurte (un caracter) care trebuie recunoscute. Daca aceasta op<?>iune nu este gasita, primul parametru din getopt care nu incepe cu ,,-" (<?>i nu este un argument de op<?>iune) este utilizat ca <?>ir scurt de op<?>iuni. Fiecare caracter de op<?>iune scurta din op<?>iuni-scurte poate fi urmat de un caracter de doua puncte ,,:" pentru a indica ca are un argument obligatoriu <?>i de doua puncte duble ,,::" pentru a indica ca are un argument op<?>ional. Primul caracter din op<?>iunile scurte poate fi ,,+" sau ,,-" pentru a influen<?>a modul in care sunt analizate op<?>iunile <?>i in care este generata ie<?>irea (a se vedea sec<?>iunea MODURI DE SCANARE pentru detalii). -q, --quiet Dezactiveaza raportarea erorilor de catre getopt(3). -Q, --quiet-output Nu genereaza o ie<?>ire normala. Erorile sunt in continuare raportate de getopt(3), cu excep<?>ia cazului in care utiliza<?>i <?>i -q. -s, --shell shell Stabile<?>te conven<?>iile de folosire a ghilimelelor la cele din shell. Daca op<?>iunea -s nu este furnizata, se utilizeaza conven<?>iile BASH. Argumentele valide sunt in prezent "sh", "bash", "csh" <?>i "tcsh". -T, --test Testeaza daca getopt(1) este aceasta versiune imbunata<?>ita sau o versiune veche. Acest lucru nu genereaza niciun rezultat <?>i stabile<?>te starea de eroare la 4. Alte implementari ale getopt(1), precum <?>i aceasta versiune, daca variabila de mediu GETOPT_COMPATIBLE este definita, vor returna ,,--" <?>i starea de eroare 0. -u, --unquoted Nu pune rezultatul intre ghilimele. Re<?>ine<?>i ca spa<?>iile albe <?>i caracterele speciale (care depind de shell) pot provoca haos in acest mod (la fel ca in cazul altor implementari getopt(1)). -h, --help Afi<?>eaza acest mesaj de ajutor <?>i iese. -V, --version Afi<?>eaza versiunea <?>i iese. ANALIZAREA Aceasta sec<?>iune specifica formatul celei de-a doua par<?>i a parametrilor din getopt (parametrii parametrii din REZUMAT). Urmatoarea sec<?>iune (IE<?>IRE) descrie rezultatul generat. Ace<?>ti parametri erau, de obicei, parametrii cu care a fost apelata o func<?>ie shell. Trebuie avut grija ca fiecare parametru cu care a fost apelata func<?>ia shell sa corespunda exact unui parametru din lista de parametri din getopt (a se vedea EXEMPLE). Toate analizele sunt efectuate de rutinele GNU getopt(3). Parametrii sunt analiza<?>i de la stanga la dreapta. Fiecare parametru este clasificat ca fiind o op<?>iune scurta, o op<?>iune lunga, un argument pentru o op<?>iune sau un parametru neop<?>ional. O op<?>iune scurta simpla este un caracter ,,-" urmat de un caracter scurt de op<?>iune. In cazul in care op<?>iunea are un argument obligatoriu, acesta poate fi scris direct dupa caracterul de op<?>iune sau ca urmatorul parametru (adica separat de spa<?>iu alb in linia de comanda). In cazul in care op<?>iunea are un argument op<?>ional, acesta trebuie scris direct dupa caracterul de op<?>iune, daca este prezent. Este posibil sa se precizeze mai multe op<?>iuni scurte dupa un "-", atata timp cat toate (cu excep<?>ia, eventual, a ultimei op<?>iuni) nu au argumente obligatorii sau op<?>ionale. O op<?>iune lunga incepe in mod normal cu ,,--" urmate de numele op<?>iunii lungi. In cazul in care op<?>iunea are un argument obligatoriu, acesta poate fi scris direct dupa numele lung al op<?>iunii, separat de ,,="" sau ca urmatorul argument (adica separat de spa<?>iu alb in linia de comanda). Daca op<?>iunea are un argument op<?>ional, acesta trebuie scris direct dupa numele lung al op<?>iunii, separat de ,,=", daca este prezent (daca adauga<?>i ,,=", dar nu adauga<?>i nimic in spatele lui, este interpretat ca <?>i cum nu ar fi prezent niciun argument; aceasta este o mica eroare, a se vedea ERORI). Op<?>iunile lungi pot fi prescurtate, atata timp cat abrevierea nu este ambigua. Fiecare parametru care nu incepe cu ,,-" <?>i care nu este un argument obligatoriu al unei op<?>iuni anterioare este un parametru neop<?>ional. Fiecare parametru care urmeaza dupa un parametru ,,--" este intotdeauna interpretat ca un parametru neop<?>ional. In cazul in care este definita variabila de mediu POSIXLY_CORRECT sau in cazul in care <?>irul scurt de op<?>iuni a inceput cu ,,+", to<?>i parametrii rama<?>i sunt interpreta<?>i ca fiind parametrii neop<?>ionalii imediat ce este gasit primul parametru neop<?>ional. IE<?>IRE Se genereaza o ie<?>ire pentru fiecare element descris in sec<?>iunea anterioara. Ie<?>irea se face in aceea<?>i ordine in care sunt specificate elementele la intrare, cu excep<?>ia parametrilor neop<?>ionali. Ie<?>irea se poate face in modul compatibil (fara-ghilimele) sau in a<?>a fel incat spa<?>iile albe <?>i alte caractere speciale din argumente <?>i parametrii neop<?>ionali sa fie pastrate (a se vedea PUNEREA INTRE GHILIMELE). Atunci cand ie<?>irea este procesata in scriptul shell, aceasta va parea compusa din elemente distincte care pot fi procesate una cate una (prin utilizarea comenzii shift in majoritatea limbajelor shell). Acest lucru este imperfect in modul ,,fara-ghilimele", deoarece elementele pot fi divizate in locuri nea<?>teptate daca con<?>in spa<?>ii albe sau caractere speciale. In cazul in care exista probleme de analiza a parametrilor, de exemplu, pentru ca un argument necesar nu este gasit sau o op<?>iune nu este recunoscuta, se va raporta o eroare la ie<?>irea de eroare standard, nu va exista nicio ie<?>ire pentru elementul in neregula <?>i se va returna o stare de eroare diferita de zero. Pentru o op<?>iune scurta, un singur caracter ,,-" <?>i caracterul op<?>iunii sunt generate ca un singur parametru. In cazul in care op<?>iunea are un argument, urmatorul parametru va fi argumentul. Daca op<?>iunea are un argument op<?>ional, dar nu a fost gasit niciunul, urmatorul parametru va fi generat, dar va fi gol in modul cu ghilimele, dar nu va fi generat un al doilea parametru in modul fara ghilimele (compatibil). Re<?>ine<?>i ca multe alte implementari getopt(1) nu accepta argumente op<?>ionale. In cazul in care mai multe op<?>iuni scurte au fost specificate dupa un singur "-", fiecare dintre ele va fi prezenta la ie<?>ire ca un parametru separat. Pentru o op<?>iune lunga, "--" <?>i numele complet al op<?>iunii sunt generate ca un singur parametru. Acest lucru se face indiferent daca op<?>iunea a fost prescurtata sau a fost specificata cu un singur "-" la intrare. Argumentele sunt tratate ca in cazul op<?>iunilor scurte. In mod normal, nu se genereaza nicio ie<?>ire din parametrii fara op<?>iuni pana cand nu au fost generate toate op<?>iunile <?>i argumentele acestora. Apoi se genereaza ,,--" ca un singur parametru, dupa care se genereaza parametrii neop<?>ionali in ordinea in care au fost gasi<?>i, fiecare ca un parametru separat. Numai in cazul in care primul caracter al <?>irului scurt de op<?>iuni a fost un ,,-", se genereaza ie<?>irea parametrilor neop<?>ionali in locul in care sunt gasi<?>i in intrare (acest lucru nu este acceptat daca se utilizeaza primul format al REZUMAT; in acest caz, toate apari<?>iile anterioare ale lui ,,-" <?>i ,,+" sunt ignorate). PUNEREA INTRE GHILIMELE In modul de compatibilitate, spa<?>iile albe sau caracterele ,,speciale" din argumente sau parametrii neop<?>ionali nu sunt tratate corect. Pe masura ce ie<?>irea este transmisa scriptului shell, scriptul nu <?>tie cum ar trebui sa imparta ie<?>irea in parametri separa<?>i. Pentru a ocoli aceasta problema, aceasta implementare ofera posibilitatea punerii intre ghilimele. Ideea este ca ie<?>irea este generata cu ghilimele in jurul fiecarui parametru. Atunci cand aceasta ie<?>ire este din nou transmisa catre shell (de obicei printr-o comanda eval), ea este impar<?>ita corect in parametri separa<?>i. Punerea intre ghilimele nu este activata daca variabila de mediu GETOPT_COMPATIBLE este definita, daca se utilizeaza prima forma a lui din REZUMAT sau daca se intalne<?>te op<?>iunea ,,-u". Diferite shell-uri folosesc conven<?>ii de punere intre ghilimele (folosire a ghilimelelor) diferite. Pute<?>i utiliza op<?>iunea ,,-s" pentru a selecta shell-ul pe care il utiliza<?>i. In prezent, sunt acceptate urmatoarele shell-uri: ,,sh", ,,bash", ,,csh" <?>i ,,tcsh". De fapt, se disting doar doua ,,arome": conven<?>ii de punere intre ghilimele de tip <<sh>> <?>i conven<?>ii de punere intre ghilimele de tip <<csh>>. Exista <?>anse ca, daca folosi<?>i un alt limbaj de script shell, sa pute<?>i folosi in continuare una dintre aceste arome (variante). MODURI DE SCANARE Primul caracter al <?>irului scurt de op<?>iuni poate fi un ,,-" sau un ,,+" pentru a indica un mod special de scanare. In cazul in care se utilizeaza prima forma de apelare din REZUMAT, acestea sunt ignorate; totu<?>i, variabila de mediu POSIXLY_CORRECT este in continuare examinata. In cazul in care primul caracter este ,,+" sau daca este definita variabila de mediu POSIXLY_CORRECT, analizarea se opre<?>te imediat ce se gase<?>te primul parametru neop<?>ional (adica un parametru care nu incepe cu ,,-") care nu este un argument op<?>ional. Parametrii rama<?>i sunt interpreta<?>i to<?>i ca fiind parametri neop<?>ionali. In cazul in care primul caracter este un ,,-", parametrii neop<?>ionali sunt lasa<?>i in locul in care sunt gasi<?>i; in mod normal, to<?>i parametrii sunt colecta<?>i la sfar<?>itul ie<?>irii dupa ce a fost generat un parametru ,,--". Re<?>ine<?>i ca acest parametru ,,--" este in continuare generat, dar va fi intotdeauna ultimul parametru in acest mod. COMPATIBILITATE Aceasta versiune a getopt(1) este scrisa pentru a fi cat mai compatibila cu alte versiuni. De obicei, le pute<?>i inlocui pur <?>i simplu cu aceasta versiune fara modificari <?>i cu unele avantaje. In cazul in care primul caracter al primului parametru din getopt nu este un ,,-", getopt trece in modul de compatibilitate. Acesta va interpreta primul sau parametru ca fiind <?>irul de op<?>iuni scurte, iar toate celelalte argumente vor fi analizate. Acesta va continua sa amestece parametrii (adica to<?>i parametrii care nu sunt op<?>iuni sunt afi<?>a<?>i la sfar<?>it), cu excep<?>ia cazului in care variabila de mediu POSIXLY_CORRECT este definita, caz in care getopt va adauga automat un ,,+" inaintea op<?>iunilor scurte. Variabila de mediu GETOPT_COMPATIBLE for<?>eaza getopt in modul de compatibilitate. Definirea atat a acestei variabile de mediu, cat <?>i a variabilei POSIXLY_CORRECT ofera compatibilitate 100% pentru programele ,,dificile". De obicei, insa, niciuna dintre ele nu este necesara. In modul de compatibilitate, caracterele ,,-" <?>i ,,+" din <?>irul scurt de op<?>iuni sunt ignorate. CODURI DE IE<?>IRE getopt returneaza codul de eroare 0 in cazul unei analizari reu<?>ite, 1 in cazul in care getopt(3) returneaza erori, 2 in cazul in care nu-<?>i in<?>elege proprii parametri, 3 in cazul unei erori interne, cum ar fi epuizarea memoriei, <?>i 4 in cazul in care este apelat cu -T. EXEMPLE Scripturile de exemplu pentru (ba)sh <?>i (t)csh sunt furnizate impreuna cu distribu<?>ia getopt(1) <?>i sunt instalate in directorul /usr/share/doc/util-linux. MEDIU POSIXLY_CORRECT Aceasta variabila de mediu este examinata de rutinele getopt(3). Daca este definita, analizarea se opre<?>te imediat ce se gase<?>te un parametru care nu este o op<?>iune sau un argument de op<?>iune. To<?>i parametrii rama<?>i sunt, de asemenea, interpreta<?>i ca parametri care nu sunt op<?>iuni, indiferent daca incep cu "-". GETOPT_COMPATIBLE For<?>eaza getopt sa utilizeze primul format de apelare, a<?>a cum este specificat in REZUMAT. ERORI getopt(3) poate analiza op<?>iunile lungi cu argumente op<?>ionale care primesc un argument op<?>ional gol (dar nu poate face acest lucru pentru op<?>iunile scurte). Acest getopt(1) trateaza argumentele op<?>ionale care sunt goale ca <?>i cum nu ar fi prezente. Sintaxa, in cazul in care nu dori<?>i nicio variabila de op<?>iune scurta nu este foarte intuitiva (trebuie sa le defini<?>i in mod explicit la <?>irul gol). AUTOR Frodo Looijaard <frodo@frodo.looijaard.name> CONSULTA<?>I <?>I bash(1), tcsh(1), getopt(3) RAPORTAREA ERORILOR Pentru rapoarte de eroare, folosi<?>i sistemul de urmarire al erorilor <https://github.com/util-linux/util-linux/issues>. DISPONIBILITATE Comanda getopt face parte din pachetul util-linux care poate fi descarcat de la Linux Kernel Archive <https://www.kernel.org/pub/linux/utils/util-linux/>. util-linux 2.41 2025-03-29 GETOPT(1)