Comenzile Shell-ului Bash

Embed Size (px)

DESCRIPTION

Comenzile Shell-ului Bash

Citation preview

Comenzile shell-ului bashOptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

NUME bash - GNU Bourne-Again SHell (shell GNU renascut) SINTAXA bash [optiuni] [fisier]COPYRIGHT Bash este Copyright (C) 1989, 1991 Free Software Foundation, Inc. DESCRIERE Bash este un interpretor-limbaj de comanda care executa comenzi citite de la intrarea standard sau dintr-un fisier. Bash incorporeaza si alte facilitati utile din shell-urile Korn si C (ksh si csh).
S-a intentionat ca Bash sa fie, in final, o implementare conforma cu specificatiile IEEE Posix Shell and Tools (IEEE Working Group 1003.2).

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

OPTIUNI Pe linga optiunile mono-caracter de shell prezentate in descrierea setului de comenzi interne ale shell-ului, bash interpreteaza, cind este apelat, si urmatoarele flaguri: -c string Daca flagul -c este prezent, comenzile sunt citite din string. Daca exista argumente dupa string, ele sunt atribuite parametrilor pozitionali, incepind cu $0. -i Daca flagul -i este prezent, shellul este interactiv. -s Daca flagul -s este prezent, sau daca nu mai ramin argumente dupa procesarea optiunii, atunci comenzile sunt citite de la intrarea standard. Aceasta optiune permite setarea parametrilor pozitionali atunci cind se invoca un shell interactiv. - O simpla liniuta semnaleaza sfirsitul optiunilor si dezactiveaza procesarea optiunilor care ii urmeaza. Orice argumente dupa liniuta sunt tratate ca nume de fisiere si argumente. Un argument cu -- este echivalent cu un argument -. Bash mai interpreteaza si un numar de optiuni multicaracter. Aceste optiuni, pentru a fi recunoscute, trebuie sa apara in linia de comanda inaintea optiunilor mono-caracter. -norc Nu citeste si nu executa fisierul personal de initializare ~/.bashrc daca shellul este interactiv. Aceasta optiune este activa implicit daca shellul este apelat ca sh. -noprofile Nu citeste nici fisierul general de start-up /etc/profile, nici fisierele personale de initializare ~/.bash_profile, ~/.bash_login sau ~/.profile. Implicit, bash citeste de obicei aceste fisiere atunci cind este apelat ca shell de login. -rcfile fisier Executa comenzi din fisier, in loc sa le ia din fisierul personal standard de initializare ~/.bashrc, daca shellul e interactiv. -version Afiseaza la pornire numarul actualei instante de bash. -quiet Nu da mesaje la pornire (nu afiseaza versiunea de shell sau alte informatii). Optiune implicit activa. -login Face bash-ul sa functioneze ca si cum ar fi fost apelat ca shell de login. -nobraceexpansion Nu realizeaza expandarea parantezelor "crete" (vezi si Expandarea Parantezelor). -nolineediting Nu foloseste biblioteca GNU Readline [citeste-linie] pentru a citi liniile de comanda, daca e interactiv. -posix Schimba comportarea bash-ului atunci cind operatiunile implicite difera de standardul Posix 1003.2, pentru a se alinia la standard.

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

ARGUMENTE Daca ramin argumente dupa procesarea optiunilor, si nu au fost folosite optiunile -c sau -s, primul argument va fi considerat a fi numele unui fisier care contine comenzi de shell. Daca bash-ul este apelat in aceasta maniera, parametrul $0 primeste ca valoare numele fisierului, iar parametrii pozitionali sunt setati la valorile argumentelor ramase. Bash citeste si executa comenzi din acest fisier, apoi iese. Starea de iesire a bash-ului este starea de iesire a ultimei comenzi executate din script.

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

DEFINITII blank Un spatiu sau un tab. cuvint O secventa de caractere considerate de shell ca o unitate. Cunoscut si ca "token". nume Un cuvint constind numai in caractere alfanumerice si "underscore" [caracterul "_"], si incepind cu un caracter alfabetic sau cu "_". Referit si ca "identificator". metacaracter Un caracter care, atunci cind nu este inclus intre ghilimele, separa cuvintele. Unul dintre urmatoarele: | & ; ( ) < > spatiu taboperator de control Un token care indeplineste o functie de control. Este unul dintre urmatoarele simboluri: || & && ; ;; ( ) |

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

CUVINTE REZERVATE
Sunt cuvinte care au un inteles special pentru shell. Urmatoarele cuvinte sunt recunoscute ca rezervate atunci cind nu sunt intre ghilimele si cind sunt fie primul cuvint dintr-o comanda simpla, fie al treilea cuvint dintr-o comanda case sau for:! case do done elif else esac fi for function if in select then until while { }

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

GRAMATICA SHELLULUI| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | Comenzi simpleO comanda simpla este o secventa de atribuiri optionale de variabile, urmata de cuvinte si redirectionari, si incheiata printr-un operator de control. Primul cuvint specifica comanda care va fi executata. Restul cuvintelor sunt folosite ca argumente ale comenzii invocate. Valoarea intoarsa de o comanda simpla este starea ei de iesire, sau 128+n daca comanda este incheiata de catre semnalul n.

| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | Pipelines ("conducte")O "pipeline" este o secventa de una sau mai multe comenzi separate prin caracterul "|". Formatul unei pipeline este: [ ! ] comanda1 [ | comanda2 ... ]Iesirea standard a comenzii 1 este conectata la intrarea standard a comenzii 2. Aceasta conectare este realizata inaintea oricaror redirectionari specificate de comanda (vezi si REDIRECTIONARE). Daca cuvintul rezervat ! precede o pipeline, starea de iesire a acelei pipeline este NU-ul logic al starii de iesire a ultimei comenzi. Altfel, starea de iesire este starea de iesire a ultimei comenzi. Shellul asteapta ca toate comenzile din pipeline sa fie incheiate inainte de a intoarce vreo valoare. Fiecare comanda dintr-o pipeline e executata ca un proces separat (adica intr-un subshell).

| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | ListeO lista este o secventa de una sau mai multe pipeline, separate prin unul dintre operatorii ;, &, &&, ||, si incheiata prin ; sau & sau Dintre acesti operatori de lista, && si || au prioritate egala, fiind urmati de ; si &, care au tot prioritate egala intre ei. Daca o comanda se incheie cu operatorul de control &, shellul executa comanda in background, intr-un subshell. Shellul nu asteapta sa se incheie executia comenzii, si starea de iesire este 0. Comenzile despartite prin ; sunt executate secvential (pe rind); shellul asteapta ca fiecare comanda sa se termine, pe rind. Starea intoarsa este starea de iesire a ultimei comenzi executate. Operatorii de control && si || denota liste SI si liste SAU, respectiv. O lista SI are forma: comanda1 && comanda2Comanda 2 este executata daca si numai daca prima comanda intoarce o stare de iesire 0. O lista SAU are forma comanda1 || comanda2Comanda 2 este executata daca si numai daca prima comanda intoarce o stare de iesire diferita de 0. Starea de iesire a unei liste SI sau SAU este starea de iesire a ultimei comenzi executate din lista.

| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | Comenzi compuseO comanda compusa este una dintre urmatoarele: (lista) Lista este executata intr-un subshell. Atribuirile de variabile si comenzile interne care afecteaza mediul shellului nu mai au efect dupa incheierea comenzii. Starea de iesire este starea de iesire a listei. { lista; } Lista este executata simplu, in shellul curent. Aceasta este cunoscuta ca o comanda-grup. Starea de iesire este starea de iesire a listei. for nume [ in cuvint; ] do lista ; done Lista de cuvinte de dupa "in" este expandata, generind o lista de itemi. Variabila "nume" ia, pe rind, valoarea fiecarui element din aceasta lista, si lista de comenzi este executata pentru fiecare valoare. Daca este omisa partea "in cuvint;", comanda "for" executa lista cite o data pentru fiecare parametru pozitional setat (vezi si PARAMETRI). select nume [ in cuvint; ] do lista ; done Lista de cuvinte de dupa "in" este expandata, generind o lista de itemi. Setul de cuvinte expandate este printat pe eroarea standard, fiecare fiind precedat de un numar. Daca partea "in cuvint" este omisa, sunt printati parametrii pozitionali (vezi si PARAMETRI). Apoi este afisat promptul PS3 si este citita o linie de la intrarea standard. Daca linia consta in numarul corespunzator unuia dintre cuvintele afisate, atunci "nume" ia ca valoare acel cuvint. Daca linia este goala, atunci cuvintele si promptul sunt afisate din nou. Daca se citeste EOF, comanda se incheie. Orice alta valoare citita face ca "nume" sa fie setata ca "null". Linia citita este salvata in variabila REPLY. Lista este executata dupa fiecare selectie pina cind este executata o comanda de "break" sau "return". Starea de iesire pentru "select" este starea de iesire a ultimei comenzi executate din lista, sau zero daca nu s-a executat nici o comanda. case cuvint in [ model [ | model ] ... ) lista ;; ] ... esac O comanda "case" mai intii expandeaza cuvintul si il compara pe rind, spre a-i gasi echivalentul, cu fiecare model, folosind aceleasi reguli de echivalare ca pentru expandarea numelui caii de acces la fisiere (vezi si Expandarea Numelui Caii de Acces). Cind se gaseste o echivalenta, se executa lista corespunzatoare. Dupa prima echivalare nu se mai cauta alta echivalenta. Starea de iesire este zero daca nu se gaseste nici o echivalenta cu vreun model. Altfel, este starea de iesire a ultimei comenzi executate din lista. if lista-if then lista-then [ elif lista-elif then lista-et ] ... [else lista-else ] fi Lista-if este executata. Daca starea ei de iesire e zero, atunci este executata lista-then. Daca nu, se executa pe rind fiecare lista-elif, si daca starea ei de iesire e zero, se executa lista-et corespunzatoare si comanda se incheie. Altfel, se executa lista-else, daca este prezenta. Starea de iesire este starea de iesire a ultimei comenzi executate, sau zero daca nici una dintre conditiile testate nu s-a dovedit adevarata. while lista-while do lista-do done
until lista-until do lista-do done Comanda "while" executa continuu lista-do atita timp cit ultima comanda din lista-while intoarce o stare de iesire 0. Comanda "until" este identica cu comanda "while", cu deosebirea ca testul este negat, si lista-do este executata atita timp cit starea de iesire a ultimei comenzi din lista-until NU este 0. Starea de iesire a comenzilor "while" sau "until" este starea de iesire a ultimei comenzi din lista-d, sau 0 daca nu s-a executat nici o comanda. [ function ] nume () { lista; } Aceasta defineste o functie denumita "nume". Corpul functiei este lista de comenzi cuprinsa intre { si }. Aceasta lista este executata ori de cite ori "nume" este specificat ca numele unei comenzi simple. Starea de iesire a unei functii este starea de iesire a ultimei comenzi executate din corpul ei (vezi si FUNCTII).

| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | COMENTARIIIntr-un shell non-interactiv sau intr-un shell interactiv in care este activata optiunea "-o comentarii-interactive" pentru comanda "set" interna, un cuvint care incepe cu # va face ca acel cuvint si toate caracterele ramase pe acea linie sa fie ignorate. Un shell interactiv care nu are setata optiunea "-o comentarii-interactive" nu va permite comentarii.

| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | CITAREACitarea este folosita pentru a anula semnificatia speciala pentru shell a anumitor caractere sau cuvinte. Citarea poate fi folosita pentru a dezactiva tratarea speciala a anumitor caractere, pentru a evita tratarea unor cuvinte ca rezervate, si pentru a interzice expandarea parametrilor. Fiecare dintre metacaracterele enumerate mai sus la DEFINITII are o semnificatie specifica pentru shell si trebuie citate daca trebuie sa fie luate in sensul lor literal. Exista trei metode de citare: caracterul-escape, ghilimele simple (apostroafe, ') si ghilimele duble (ghilimele propriu-zise, "). Un backslash (\) este caracterul-escape. El va face sa fie pastrata valoarea literala a urmatorului caracter, cu exceptia caracterului Includerea caracterelor intre apostroafe pastreaza valoarea literala a fiecarui caracter dintre cele incluse. Intre apostroafe nu poate sa apara un apostrof, nici macar precedat de backslash. Includerea caracterelor intre ghilimele duble pastreaza valoarea literala a tuturor caracterelor dintre ghilimele, cu exceptiile: $, `, si \. Caracterele $ si ` isi pastreaza semnificatiile speciale si intre ghilimele duble. Backslash-ul (\) isi pastreaza semnificatia speciala numai atunci cind e urmat de unul din urmatoarele caractere: $, `, ", \, sau Parametrii speciali * si @ au semnificatii speciale atunci cind sunt intre ghilimele duble (vezi si PARAMETRI).

| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri | PARAMETRIExista parametri pozitionali si parametri speciali. Un parametru este o entitate care memoreaza valori, oarecum similar cu o variabila dintr-un limbaj de programare. Poate fi un nume, un numar, sau unul dintre caracterele speciale enumerate la Parametri Speciali. Pentru scopurile shell-ului, o variabila este un parametru desemnat printr-un nume. Un parametru este setat daca i s-a atribuit o valoare. Sirul nul este o valoare valida. Dupa ce o variabila a fost setata, ea poate fi de-setata numai folosind comanda interna "unset" (vezi COMENZILE INTERNE DE SHELL). O variabila poate primi o valoare printr-o instructiune de forma: nume=[valoare]Daca valoarea lipseste, variabilei ii este atribuit sirul nul ca valoare. Toate valorile suporta expandare prin tilda (~), expandare de parametri si variabile, substituire de comenzi, expandare aritmetica, si stergerea citarii. Daca variabila are setat atributul -i (vezi mai jos comanda "declare", in COMENZI INTERNE ALE SHELL-ULUI) atunci valoarea este supusa expandarii aritmetice, chiar daca nu apare sintaxa $[...]. Este realizata spargerea cuvintelor ["word splitting"] cu exceptia cazului "$@", asa cum se explica in "Parametri Speciali". Expandarea numelui de cale nu este efectuata. Parametri pozitionaliUn parametru pozitional este un parametru desemnat de una sau mai multe cifre, diferite de simpla cifra 0. Parametrilor pozitionali li se atribuie valori dupa argumentele shell-ului, cind acesta este invocat, si li se pot atribui valori noi prin comanda interna de shell "set". Este posibil ca parametrilor pozitionali sa nu li se atribuie valori prin instructiuni de atribuire. Ei sunt inlocuiti temporar cind este executata o functie de shell (vezi si FUNCTII). Cind este expandat un parametru pozitional care consta in mai mult de o singura cifra, el trebuie inclus intre paranteze (vezi EXPANDARE).

Parametri SpecialiShell-ul trateaza in mod special anumiti parametri. Acesti parametri pot fi doar referiti; nu este permis sa li se atribuie valori. * Expandeaza la parametrii pozitionali, incepind cu primul. Cind expandarea apare intre ghilimele duble, se obtine un singur cuvint cu valorile fiecarui parametru separate prin primul caracter al variabilei speciale IFS. Adica ``$*'' este echivalentul pentru ``$1c$2c...'', unde c este primul caracter al valorii variabilei IFS. Daca IFS este nula sau nesetata, parametrii sunt separati prin spatiu. @ Expandeaza la parametrii pozitionali, incepind cu primul. Cind expandarea survine intre ghilimele duble, fiecare parametru e expandat ca un cuvint separat. Adica `` $@'' e echivalent cu ``$1'' ``$2'' ... Cind nu exista parametri pozitionali, ``$@'' si $@ sunt expandate la ceva nul (adica sunt sterse). # Expandeaza la parametri pozitionali numerotati zecimal. ? Expandeaza la starea celei mai recente "pipeline" executate in "foreground". - Expandeaza la flagurile optionale curente, asa cum sunt specificate la invocare, de comanda interna "set", sau la cele setate chiar de catre shell (cum este flagul -i). $ Expandeaza la identificatorul de proces (PID) al shell-ului. Intr-un subshell (), expandeaza la PID-ul shell-ului curent, nu la al subshell-ului. ! Expandeaza la PID-ul celei mai recente comenzi (asincrone) executate in "background". 0 Expandeaza la numele shell-ului sau al scriptului de shell. Acesta e setat la initializarea shell-ului. Daca shell-ul bash este invocat cu un fisier de comenzi, $0 este setat la numele acelui fisier. Daca shell-ul bash este pornit cu optiunea -c, atunci $0 este setat la primul argument de dupa stringul care trebuie executat, daca este prezent vreunul. Altfel, este setat la calea de acces folosita pentru invocarea shell-ului bash, asa cum este ea data de argumentul zero. _ Expandeaza la ultimul argument al comenzii precedente, dupa expandare. Este setat si la calea completa a fiecarei comenzi executate, si plasat in mediul ["environment"] exportat de acea comanda.

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

Variabile de ShellUrmatoarele variabile sunt setate de catre shell: PPID PID-ul (identificatorul de proces) al shell-ului parinte. PWD Directorul curent de lucru, setat de comanda "cd". OLDPWD Directorul de lucru precedent setat de comanda "cd". REPLY Setat la linia de intrare citita de comanda interna "read" atunci cind nu se furnizeaza nici un argument. UID Expandeaza la UID-ul (identificatorul de utilizator) al utilizatorului curent, initializat la pornirea shell-ului. EUID Expandeaza la UID-ul utilizatorului efectiv, initializat la pornirea shell-ului. BASH Expandeaza la calea de acces completa folosita pentru a invoca instanta de bash curenta. BASH_VERSION Expandeaza la numarul versiunii instantei curente de bash. SHLVL Incrementat cu 1 de fiecare data cind este lansata o noua instanta de bash. RANDOM De fiecare data cind e referit acest parametru, este generat aleator un numar intreg. Sirul de numere aleatoare poate fi initializat atribuind lui RANDOM o valoare. Daca RANDOM este de-setat, isi pierde proprietatile speciale, chiar si daca ulterior este setat din nou. SECONDS De fiecare data cind este referit acest parametru, este returnat numarul de secunde trecute de la invocarea shell-ului. Daca lui SECONDS i se atribuie o valoare, valoarea returnata dupa o referire ulterioara va fi numarul de secunde scurse de la atribuire, plus valoarea atribuita. Daca SECONDS e de-setat, isi pierde proprietatile speciale, chiar si daca ulterior e setat din nou. LINENO De fiecare data cind e referit acest parametru, shell-ul il inlocuieste cu un numar zecimal reprezentind numarul secvential curent al rindului (incepind numararea de la 1) dintr-un script sau dintr-o functie. Cind nu e vorba de un script sau o functie, nu este garantata semnificatia valorii substituite. Cind e dintr-o functie, valoarea nu e numarul liniei-sursa in care apare comanda (aceasta informatie s-a pierdut in momentul executarii functiei), ci e o aproximare a numarului de comenzi simple executate in functia curenta. Daca LINENO este de-setat, isi pierde proprietatile speciale, chiar si daca ulterior e re-setat. HISTCMD Numarul din istoric, sau indexul din lista "history", al comenzii curente. Daca HISTCMD e de-setata, isi pierde proprietatile speciale, chiar si daca e re-setat ulterior. OPTARG Valoarea ultimului argument-optiune procesat de comanda interna "getopts" (vezi si COMENZILE INTERNE ALE SHELL-ULUI). OPTIND Indexul urmatorului argument care va fi procesat de comanda interna "getopts" (vezi si COMENZILE INTERNE ALE SHELL-ULUI). HOSTTYPE Setat automat la un string care descrie, in mod unic, tipul de masina pe care se executa bash-ul. Valoarea implicita e in functie de sistem. OSTYPE Setat automat la un string care descrie sistemul de operare sub care se executa bash-ul. Valoarea implicita e in functie de sistem. Urmatoarele variabile sunt folosite de shell. In unele cazuri, bash atribuie unei variabile o valoare implicita; aceste cazuri nu sunt specificate mai jos. IFS Reprezinta Separatorul de Cimpuri Intern, care e folosit pentru desfacerea cuvintelor dupa expandare si pentru a desface linii in cuvinte cu comanda interna "read". Valoarea implicita este `` PATH Calea de cautare a comenzilor. Este o lista de directoare, despartite prin ":", in care shell-ul cauta comenzile (vezi si EXECUTIA COMENZILOR). Calea implicita este dependenta de sistem, si e setata de administratorul care instaleaza bash-ul. O valoare obisnuita este: ``/usr/gnu/bin:/usr/local/bin:/usr/ucb:/bin:/usr/bin:.''. HOME Directorul-casa ("home") al utilizatorului curent; e argument implicit pentru comanda interna "cd". CDPATH Calea de cautare pentru comanda "cd". Este o lista de directoare, separate prin ":", in care shell-ul cauta directoarele de destinatie specificate de comanda "cd". O valoare simpla este ``.:/usr''. ENV Daca acest parametru e setat cind bash executa un script de shell atunci valoarea lui e interpretata ca fiind numele fisierului continind comenzi pentru initializarea shell-ului, asa cum e in .bashrc. Valoarea lui ENV este supusa la expandare de parametri, substituire de comenzi si expandare aritmetica, inainte de a fi interpretata ca nume de cale de acces. Nu se foloseste PATH pentru a cauta calea de acces rezultata. MAIL Daca acest parametru e setat la un nume de fisier si variabila MAILPATH nu e setata, bash il informeaza pe utilizator despre sosirea de mesaje noi in fisierul specificat. MAILCHECK Specifica frecventa (in secunde) cu care bash-ul verifica daca au sosit mesaje. Valoarea implicita e de 60 de secunde. Cind e timpul sa verifice posta, shell-ul face asta inainte de a afisa promptul de comanda. Daca variabila nu e setata, va fi dezactivata verificarea postei. MAILPATH O lista de cai de acces, separate prin ":", in care va fi verificata sosirea postei. Mesajul de tiparit poate fi specificat separind calea de mesaj printr-un "?". $_ semnifica fisierul curent de posta. Exemplu:
MAILPATH='/usr/spool/mail/bfox?"You have mail":~/shell-mail?"$_ has mail!"'
Bash asigura acestei variabile o valoare implicita, dar locatia pe care o foloseste pentru fisierele de mesaje ale utilizatorului este dependenta de sistem (de pilda, /usr/spool/mail/$USER). MAIL_WARNING Daca e setata, si daca un fisier pe care bash-ul il verifica pentru posta sosita a fost accesat de la ultima data cind a fost verificat, este afisat mesajul: ``The mail in mailfile has been read''. PS1 Valoarea acestui parametru e expandata (vezi mai jos PROMPTUL) si folosita ca primul string de prompt. Valoarea implicita e ``bash\$ ''. PS2 Valoarea acestui parametru e expandata si folosita ca string de prompt secundar. Implicit este ``>''. PS3 Valoarea acestui parametru e folosita ca prompt pentru comanda "select" (vezi mai sus GRAMATICA SHELL-ULUI). PS4 Valoarea acestui parametru e expandata si valoarea e afisata inaintea fiecarei comenzi afisate de bash in timpul urmaririi unei executii cu o procedura tip "trace". Primul caracter al lui PS4 e replicat de cite ori e nevoie, pentru a indica nivele multiple de "indirection". Implicit este ``+ ''. HISTSIZE Numarul de comenzi ce trebuie memorate in istoricul comenzilor (vezi si ISTORICUL). Valoarea implicita e 500. HISTFILE Numele fisierului in care e salvat istoricul comenzilor. (Vezi si ISTORICUL). Valoarea implicita e ~/.bash_history. Daca nu e setat, istoricul comenzilor nu e salvat cind se iese dintr-un shell interactiv. HISTFILESIZE Numarul maxim de linii din fisierul istoric. Cind acestei variabile i se atribuie o valoare, fisierul istoric e trunchiat, daca e necesar, ca sa nu contina mai multe linii decit acel numar. Valoarea implicita este 500. OPTERR Daca e setat la valoarea 1, bash afiseaza mesajele de eroare generate de comanda interna "getopts" (vezi COMENZIOLE INTERNE ALE SHELL-ULUI). OPTERR e initializat cu valoarea 1 de fiecare data cind este invocat un shell sau este executat un script de shell. PROMPT_COMMAND Daca e setat, valoarea lui e executata ca o comanda care are prioritate inainte de afisarea fiecarui prompt primar. IGNOREEOF Controleaza actiunea shell-ului la receptionarea unui caracter EOF (end-of-file = sfirsit de fisier) ca unica intrare.Daca e setat, valoarea lui este numarul de caractere EOF introduse consecutiv ca prime caractere ale unui rind de intrare, inainte sa se iasa din bash. Daca variabila exista dar nu are o valoare numerica, sau nu are nici o valoare, valoarea lui implicita este 10. Daca ea nu exista, EOF semnifica pentru shell sfirsitul intrarii. Acest lucru e valabil numai pentru shell-uri interactive. TMOUT Daca e setat la o valoare mai mare decit zero, valoarea este interpretata ca numarul de secunde de asteptare a intrarii dupa afisarea promptului principal. Bash isi incheie executia dupa ce asteapta acel numar de secunde, daca intrarea nu vine. FCEDIT Editorul implicit pentru comanda interna "fc". FIGNORE O lista de sufixe (separate prin ":") care vor fi ignorate cind se realizeaza completarea unui nume de fisier (vezi mai jos READLINE). Un nume de fisier al carui sufix corespunde cu unul din elementele listei FIGNORE este exclus din lista fisierelor cautate. Un exemplu este ``.o:~''. INPUTRC Numele fisierului de pornire pentru "readline", care va inlocui implicitul ~/.inputrc (vezi READLINE mai jos). notify Daca e setat, bash raporteaza imediat joburile incheiate din "background", in loc sa astepte pina la afisarea urmatorului prompt principal (vezi si optiunea -b de la comanda "set"). history_control
HISTCONTROL Daca este setat la valoarea "ignorespace", liniile care incep cu un spatiu nu sunt introduse in lista-istoric. Daca e setat la valoarea "ignoredups", liniile identice cu ultima linie din istoric nu sunt introduse. Valoarea "ignoreboth" combina cele doua optiuni. Daca nu e setat, sau daca e setat la o alta valoare decit cele de mai sus, toate liniile citite de parser sunt salvate in lista-istoric. command_oriented_history Daca e setata, bash-ul incearca sa salveze toate liniile unei comenzi cu linii multiple in acelasi rind din istoric. Aceasta permite editarea usoara a comenzilor cu linii multiple. glob_dot_filenames Daca e setat, bash-ul include, in rezultatele expandarii caii de acces, numele de fisier care incep cu punct (`.'). allow_null_glob_expansion Daca e setata, bash-ul permite modelelor de cai de acces care nu corespund nici unui fisier (vezi mai jos Expandarea Numelor de Cai de Acces) sa fie expandate la un string nul, in loc de a fi expandate la ele insele. histchars Cele 2 sau 3 caractere care controleaza expandarea de istoric si tokenizarea (vezi mai jos HISTORY expansion). Primul este caracterul expandarii de istoric, adica acel caracter care semnalizeaza inceputul unei expandari de expandari de istoric, in mod normal `!'. Al doilea caracter este caracterul de substituire rapida, care e folosit ca o scurtatura pentru a repeta executia comenzii introduse anterior, inlocuind un sir de caractere cu altul, in comanda. Implicit este `^'. Cel de-al treilea caracter, optional, e caracterul care arata ca restul liniei este un comentariu, atunci cind e gasit ca prim caracter al unui cuvint, in mod normal `#'. Caracterul pentru comentarea istoricului face sa fie abandonata substituirea de istoric pentru restul cuvintelor de pe linie. Nu e neaparat necesar ca el sa faca parser-ul shell-ului sa trateze restul liniei ca pe un comentariu. nolinks Daca e setat, shell-ul nu urmareste legaturile simbolice cind executa comenzi ce schimba directorul de lucru curent. In loc de asta, el foloseste structura fizica de directoare. In mod implicit, bash-ul urmeaza lantul logic de directoare atunci cind executa comenzi care schimba directorul curent, ca "cd". Vezi si descrierea optiunii -P a comenzii interne "set"). hostname_completion_file
HOSTFILE Contine numele unui fisier cu acelasi format ca si /etc/hosts, care ar trebui citit cind shell-ul trebuie sa completeze un nume de host (gazda). Fisierul poate fi schimbat interactiv; data urmatoare cind se incearca o completare a unui nume de host, bash-ul adauga continutul noului fisier la baza de date deja existenta. noclobber Daca e setat, bash-ul nu scrie peste un fisier existent cind se folosesc operatorii de redirectionare >, >& si . Aceasta variabila poate fi trecuta cu vederea cind se creeaza fisiere de iesire daca se foloseste operatorul de redirectionare >| in loc de > (vezi si optiunea -C a comenzii interne "set"). auto_resume Aceasta variabila controleaza modul in care interactioneaza shell-ul cu utilizatorul si cu controlul joburilor. Daca este setata, comenzile simple, de un singur cuvint, care nu contin redirectionari, sunt tratate ca incercari de reluare a unui job intrerupt pe moment. Nu e permisa nici o ambiguitate; daca exista mai multe joburi ce incep cu sirul introdus, este ales jobul accesat cel mai recent. Numele unui job intrerupt, in acest context, e linia de comanda folosita pentru a-l opri. Daca e setata la valoarea "exact", stringul dat trebuie sa corespunda cu precizie numelui unui job stopat. Valoarea "substring" asigura o functionare analoga cu identificatorul de job %? (vezi si CONTROLUL JOBURILOR). Daca e setat la alta valoare, sirul dat trebuie sa fie un prefix sau numele unui job intrerupt; aceasta asigura o functionare analoga cu a identificatorului de job %. no_exit_on_failed_exec Daca exista aceasta variabila, un shell ne-interactiv nu se va incheia daca nu poate executa fisierul specificat in comanda interna "exec". Un shell interactiv nu iese din executie daca esueaza comanda "exec". cdable_vars Daca e setata, un argument al comenzii interne "cd", care nu e un director, va fi presupus ca fiind numele unei variabile a carei valoare este directorul care va deveni director curent.

OptiuniArgumenteDefinitiiCuvinte rezervateGramatica shell-uluiVariabile de shell

ExpandareaRedirectionareaFunctiiAlias-uriControlul job-urilorSemnale

Executia comenzilorMediulStarea de iesireAfisarea prompteruluiBiblioteca ReadlineIstoricul

Evaluarea aritmeticaComenzi interne de shellInvocarea shelului

EXPANDAREAExpandarea e realizata pe linia de comanda, dupa ce aceasta a fost impartita in cuvinte. Exista 7 tipuri de expandare: expandare de paranteze, expandare de tilda, expandare de parametri si variabile, substituire de comenzi, expandare aritmetica, impartire in cuvinte si expandarea caii de acces. Ordinea expandarilor este: expandare de paranteze, expandare de tilda, substituire de parametri, variabile, comenzi si aritmetica (de la stinga la dreapta), impartire in cuvinte si expandarea numelui caii de acces. Pe sistemele care o pot suporta, este disponibil inca un tip de expandare: substituire de procese. Numai expandarea de paranteze, impartirea in cuvinte si expandarea numelui caii de acces pot schimba numarul de cuvinte din expandare; celelalte expandeaza de la un singur cuvint la un singur cuvint. Singura exceptie este expandarea lui ``$@'', asa cum s-a explicat mai sus (vezi PARAMETRI). Expandarea de ParantezeEste un mecanism prin care pot fi generate siruri arbitrare de caractere. Acest mecanism e similar cu expandarea numelui de cale de acces, dar numele de fisiere generate nu trebuie neaparat sa existe. Structurile care trebuie sa suporte expandarea de paranteze iau forma unui preambul optional, urmat de o serie de siruri despartite prin virgule, intre o pereche de paranteze, urmate de un post-ambul optional. Preambulul este atasat inaintea fiecarui sir dintre paranteze, iar post-ambulul este apoi atasat la finele fiecarui sir rezultat, expandarea facindu-se de la stinga la dreapta. Expandarile de paranteze pot fi facute pe mai multe nivele. Rezultatele expandarii fiecarui sir nu sunt sortate: ordinea de la stinga la dreapta e pastrata. De exemplu, a{d,c,b}e se expandeaza la `ade ace abe'. Expandarea de paranteze e facuta inainte de orice alta expandare, si orice caracter cu rol special in alte expandari e pastrat in rezultat. Este un proces strict textual. Bash-ul nu face nici o interpretare sintactica a contextului expandarii sau textului dintre paranteze. O expandare de paranteze corect construita trebuie sa contina paranteze de deschidere si inchidere, necitate, si cel putin o virgula necitata. Orice expandare de paranteze incorect construita este lasata nemodificata. Aceasta constructie e folosita uzual ca scurtatura atunci cind prefixul comun sirurilor ce trebuie generate e mai lung decit in exemplul de mai sus: mkdir /usr/local/src/bash/{old,new,dist,bugs} sau chown root /usr{ucb/{ex,edit},lib/{ex?.?*, how_ex}} Expandarea de paranteze introduce o usoara incompatibilitate cu versiunile traditionale de sh, shell-ul Bourne. Sh-ul nu trateaza in mod special parantezele de deschidere si inchidere atunci cind ele apar ca parte a unui cuvint, si le pastreaza la iesire. Bash-ul elimina parantezele din cuvinte, ca urmare a expandarii de paranteze. De exemplu, un cuvint introdus in sh ca file{1,2} apare la fel la iesire. Acelasi cuvint va apare, dupa expandarea din bash, sub forma file1 file2. Daca se doreste o compatibilitate stricta cu shell-ul sh, atunci trebuie lansat bash-ul cu optiunea -nobraceexpansion (vezi mai sus OPTIUNI) sau se va dezactiva expandarea de paranteze cu optiunea +o braceexpand a comenzii "set" (vezi COMENZILE INTERNE DE SHELL).

Expandarea de tildaDaca un cuvint incepe cu un caracter tilda (`~'), toate caracterele dinaintea primului slash (sau toate caracterele, daca nu exista nici un slash) sunt tratate ca un posibil nume de login (nume de cont). Daca acest nume de login este un sir nul, tilda este inlocuita cu valoarea parametrului HOME. Daca HOME nu este setat, este pus in locul tildei directorul home al utilizatorului care executa shell-ul. Daca un `+' urmeaza tilda, atunci valoarea lui PWD va inlocui tilda si semnul plus. Daca o urmeaza un `-' (minus), se pune in loc valoarea lui OLDPWD. Daca valoarea care urmeaza tilda este un nume de login valid, tilda si numele de login sunt inlocuite cu directorul home asociat acelui nume de login. Daca numele e invalid, sau daca expandarea de tilda esueaza, cuvintul ramine neschimbat. Fiecare atribuire de valoare unei variabile e verificata pentru a se gasi aparitii necitate ale tildei dupa : sau =. Si in aceste cazuri se realizeaza substituirea de tilda. In consecinta, se pot folosi nume de cai de acces cu tilde in atribuirea de valori pentru parametrii PATH, MAILPATH si CDPATH, iar shell-ul le va atribui valorile expandate.

Expandarea ParametrilorCaracterul `$' introduce expandarea parametrilor, substituirea de comenzi sau expandarea aritmetica. Numele sau simbolul parametrului care trebuie expandat poate fi cuprins intre paranteze, care sunt optionale dar slujesc la protejarea variabilei de expandat, de caracterul imediat urmator, care ar putea fi interpretat ca facind parte din nume. ${parametru} In locul acesteia se pune valoarea parametrului. Parantezele sunt obligatorii cind parametrul este un parametru pozitional cu mai mult de o cifra, sau cind parametrul e urmat de un caracter care nu trebuie interpretat ca parte a numelui sau. In fiecare dintre cazurile de mai jos, cuvintul este supus expandarii de tilda, expandarii de parametru, substituirii de comanda si expandarii aritmetice. Bash-ul verifica daca parametrul este nesetat sau nul; omiterea semnului `:' face sa se verifice numai daca parametrul este nesetat. ${parametru:-cuvint} Foloseste Valorile Implicite. Daca parametrul e nesetat sau nul, in loc se pune expandarea cuvintului. Altfel se va folosi valoarea parametrului. ${parametru:=cuvint} Atribuie Valori Implicite. Daca parametrul e nesetat sau nul, i se atribuie ca valoare expandarea cuvintului, in locul valorii lui curente. Parametrii pozitionali si cei speciali pot sa primeasca valori si altfel. ${parametru:?cuvint} Afiseaza Eroare pentru Nul sau Nesetat. Daca parametrul e nul sau nesetat, expandarea cuvintului (sau un mesaj corespunzator daca lipseste cuvintul) este scris la iesirea de eroare standard, si shell-ul, daca nu e interactiv, iese din executie. Altfel, in loc se pune valoarea parametrului. ${parametru:+cuvint} Foloseste Valoarea Alternativa. Daca parametrul e nul sau nesetat, nu se inlocuieste nimic, altfel se pune in loc expandarea cuvintului. ${#parametru} Se inlocuieste cu lungimea in caractere a valorii parametrului. Daca parametrul e * sau @, lungimea pusa in loc este lungimea lui * expandat intre ghilimele. ${parametru#cuvint}
${parametru##cuvint} Cuvintul e expandat la un model exact ca in expandarea numelui caii de acces. Daca modelul e identic cu inceputul valorii parametrului, atunci expandarea e valoarea parametrului cel mai scurt (pentru ``#'') sau cel mai lung (pentru ``##'') ramas dupa stergerea modelului identificat. ${parametru%cuvint}
${parametru%%cuvint} Cuvintul e expandat la un model exact ca in expandarea numelui caii de acces. Daca modelul e identic cu partea finala a valorii parametrului, atunci expandarea e valoarea parametrului cel mai scurt (pentru ``%'') sau cel mai lung (pentru ``%%'') ramas dupa stergerea modelului identificat.

Substituirea de comenziSubstituirea de comenzi permite ca iesirea unei comenzi sa inlocuiasca numele comenzii. Exista doua forme: $(comanda) sau `comanda' Bash-ul realizeaza ezpandarea executind comanda si inlocuind substituirea de comenzi cu iesirea standard a comenzii, fara sa stearga caracterele "rind nou" de la sfirsit. Cind este folosita forma de stil vachi cu apostroafe, backslash-ul ii pastreaza sensul ei literal, cu exceptia cazurilor cind e urmat de $, ` sau \. Cind se foloseste forma ${comanda}, toate caracterele dintre paranteze alcatuiesc comanda; nici unul nu e tratat special. Substituirile de comenzi pot fi continute unele in altele. Pentru a face asta folosind vechea forma, apostroful interior trebuie precedat de backslash, pentru a-i pastra sensul real. Daca substituirea apare intre ghilimele, asupra rezultatelor nu se efectueaza separarea in cuvinte si expandarea de cale de acces.

Expandarea aritmeticaExpandarea aritmetica permite evaluarea unei expresii aritmetice si substituirea ei cu rezultatul. Exista doua formate pentru expandarea aritmetica:

$[expresie]

$((expresie))Expresia e tratata ca si cum ar fi intre ghilimele, dar o ghilimea aflata intre paranteze nu va fi tratata special. Toate elementele din expresie suporta expandarea de parametri, substituirea de comenzi si inlaturarea semnelor de citare. Substituirile aritmetice pot fi cuprinse unele in altele. Evaluarea se face conform regulilor listate mai jos sub titlul EVALUAREA ARITMETICA. Daca expresia este invalida, bash-ul scrie un mesaj indicind esecul si nu are loc nici o substituire.

Substituirea de proceseSubstituirea de procese e permisa pe sisteme care suporta pipe-uri denumite (FIFO-uri) sau metoda /dev/fd de denumire a fisierelor deschise. Ea ia forma (lista). Lista de procese este executata cu intrarea sau iesirea conectata la o FIFO sau la un fisier din /dev/fd. Numele acestui fisier este trecut, ca argument, comenzii curente, ca rezultat al expandarii. Daca se foloseste forma >(lista), scrierea in fisier va asigura intrarea pentru lista. Daca se foloseste forma