 |
|
 |
|
Baronul Founder


Data inscrierii: 30/Oct/2006 Mesaje: 128 Localitate: Where ever I want to be.
|
|
 |
|
 |
|
Trimis: 18/01/2007 08:56 Titlul subiectului: E-Books |
|
|
Comenzile shell-ului bash
traduse de Baronul dupa manualul on-line din Linux.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Dispoziția de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
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).
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
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 îngăduie setarea parametrilor pozitionali atunci cind se invoca un shell interactiv.
-
O simpla liniuta semnaleaza sfirsitul optiunilor si dezactiveaza procesarea optiunilor care ii urmeaza. Absolut 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.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
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.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
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 tab
operator de control
Un token care indeplineste o functie de control. Este unul dintre urmatoarele simboluri:
|| & && ; ;; ( ) |
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
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 { }
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
GRAMATICA SHELLULUI
| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri |
Comenzi simple
O comanda simpla este o secventa de atribuiri optionale de variabile, urmata de cuvinte si redirectionari, si incheiata printr-un operator de control. întâiul cuvint specifica comanda care va fi executata. Restul cuvintelor sunt utilizate 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 numeroase 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 |
Liste
O 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 && comanda2
Comanda 2 este executata daca si numai daca întâia comanda intoarce o stare de iesire 0.
O lista SAU are forma
comanda1 || comanda2
Comanda 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 compuse
O 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 concluzie 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 porțiunea "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 bucată "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. Indiferent ce 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". Trunchiul 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 trupul ei (vezi si FUNCTII).
| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri |
COMENTARII
Intr-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 |
CITAREA
Citarea 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 . Daca apare o pereche \ si backslash-ul nu e citat, atunci perechea \ este interpretat ca o continuare a liniei (adica e complet ignorata).
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 deosebite si intre ghilimele duble. Backslash-ul (\) isi pastreaza semnificatia speciala numai atunci cind e urmat de unul din urmatoarele caractere: $, `, ", \, sau . O ghilimea dubla (") poate fi citata intre ghilimele duble numai daca e precedata de \.
Parametrii aparte * si @ au semnificatii unice atunci cind sunt intre ghilimele duble (vezi si PARAMETRI).
| Comenzi simple | Pipelines | Liste | Comenzi compuse | Comentarii | Citarea | Parametri |
PARAMETRI
Exista 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 excepționale 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 pozitionali
Un parametru pozitional este un parametru desemnat de una sau mai multe cifre, diverse 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 Speciali
Shell-ul trateaza in mod distinct 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 solitar cuvint cu valorile fiecarui parametru separate prin primul caracter al variabilei speciale IFS. Adica ``$*'' este echivalentul pentru ``$1c$2c...'', unde c este debutantul 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.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
Variabile de Shell
Urmatoarele 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 fapt 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 întrebuințat 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 inițialul 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 de frunte (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 altera 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 transforma 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 ajunge director curent.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
EXPANDAREA
Expandarea 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 Paranteze
Este 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 succesiune 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 particular 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 perfect 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 tilda
Daca 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 Parametrilor
Caracterul `$' 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 iute 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 extraordinari 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. <DT${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 întocmai ca in expandarea numelui caii de acces. Daca șablonul 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 exemplarul e identic cu componentă 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 comenzi
Substituirea 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 întrebuințând vechea forma, apostroful partea interioară 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 aritmetica
Expandarea 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 procese
Substituirea 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) sau >(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 <(lista), fisierul trecut ca argument va trebui sa fie citit pentru a obtine iesirea listei.
Pe sistemele care o suporta, substituirea de comenzi este efectuata simultan cu expandarea de variabile, substituirea de comenzi si expandarea aritmetica.
Separarea cuvintelor
Shell-ul scaneaza rezultatele expandarii de parametri, substituirii de comenzi si expandarii aritmetice care nu au fost in ghilimele, pentru separarea cuvintelor.
Shell-ul trateaza fiecare caracter din variabila IFS ca delimitator, si desparte rezultatele celorlalte expandari in cuvinte, dupa aceste caractere. Daca valoarea luiIFS este exact , cea implicita, atunci orice secventa de caractere IFS serveste ca sa delimiteze cuvintele. Daca IFS are o alta valoare decit cea implicita, atunci secventele de caractere "albe" si de la inceputul si sfirsitul cuvintului sunt ignorate, atita timp cit caracterul "alb" se afla in valoarea lui IFS (un caracter "alb" IFS). Orice caracter din IFS care nu e caracter "alb" IFS, impreuna cu orice caracter "alb" IFS adiacent, delimiteaza un cimp. O secventa de caractere "albe" IFS este tratata tot ca delimitator. Daca valoarea lui IFS este nula, nu are loc nici o separare in cuvinte. IFS nu poate fi nesetata.
Argumentele explicit nule ("" sau '') sunt pastrate. Argumentele nule in mod implicit, efecte din expandarea parametrilor care nu au valori, sunt sterse.
Daca nu are loc nici o expandare, nu se efectueaza nici o separare in cuvinte.
Expandarea numelui caii de acces
Dupa separarea in cuvinte, in afara de cazul cind a fost setata optiunea -f, bash-ul scaneaza fiecare cuvint pentru caracterele *, ? si [. Daca apare unul dintre aceste caractere, atunci cuvintul este tratat ca tipar, si este inlocuit cu o lista, sortata in ordine alfabetica, de cai de acces care corespund tiparului. Daca nu sunt gasite cai de acces care sa se potriveasca tiparului, si variabila de shell allow_null_glob_expansion este nesetata, atunci cuvintul e lasat neschimbat. Daca variabila e setata si nu se gasesc corespondente cu tiparul, cuvintul este sters. Cind se foloseste un tipar pentru generarea numelor de cai de acces, caracterul ``.'' de la inceputul unui nume sau urmind grabnic dupa un slash trebuie sa fie regasit in mod explicit, cu exceptia cazului cind variabila glob_dot_filenames este setata. Caracterul slash trebuie intotdeauna sa fie regasit in mod explicit. In celelalte cazuri, caracterul ``.'' nu este tratat in mod special.
Caracterele particulare ale tiparului au urmatoarele semnificatii:
*
Corespunde oricarui sir de caractere, inclusiv sirul nul.
?
Corespunde oricarui caracter, unul singur.
[...]
Corespunde oricaruia dintre caracterele cuprinse intre acolade. O pereche de caractere despartite de un minus denota un domeniu; ii va corespunde oricarui caracter aflat, lexical, intre cele doua caractere, inclusiv. Daca primul caracter care urmeaza dupa [ este ! sau ^, atunci ii va corespunde oricare caracter care nu este inclus, lexical, in domeniul delimitat de cele doua caractere. Un - sau ] pot fi cautate daca sunt incluse ca primul sau ultimul caracter al domeniului.
Inlaturarea semnelor citarii
Dupa expandarile precedente, toate aparitiile necitate ale caracterelor \, ` si " sunt inlaturate.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
REDIRECTIONAREA
| Redirectionarea Intrarii | Redirectionarea Iesirii | Iesirea Redirectionata cu Adaugare | Redirectionarea Intrarii Standard si a Erorii Standard | Redirectionarea tip Document Prezent | Duplicate ale descriptorilor de fisiere | Deschiderea descriptorilor de fisiere pentru citire/scriere |
Inainte ca o comanda sa fie executata, intrarea si iesirea ei pot fi redirectionate utilizând o notatie speciala care e interpretata de shell. Redirectionarea mai poate fi folosita si pentru a inchide si deschide fisiere pentru mediul de executie al shell-ului curent. Operatorii de redirectionare de mai jos pot precede sau pot aparea oriunde intr-o comanda simpla, sau pot urma comanda. Redirectionarile sunt procesate in ordinea aparitiei, de la stinga spre dreapta.
In descrierile de mai jos, daca se omite numarul ce descrie fisierul, si daca primul caracter al operatorului de redirectionare este <, atunci redirectionarea se refera la intrarea standard (fisierul 0). Daca primul caracter al operatorului de redirectionare este >, atunci redirectionarea se refera la iesirea standard (fisierul 1).
Cuvintul ce urmeaza dupa operatorul de redirectionare in descrierile de mai jos este supus la expandare de paranteze, de tilda, de parametri, substituire de comenzi, expandare aritmetica, inlaturarea semnelor citarii si expandarea caii de acces. Daca el e expandat la mai mult de un cuvint, bash-ul raporteaza o eroare.
Retineti ca ordinea redirectionarilor este importanta. De exemplu, comanda:
ls > dirlist 2>&1
directioneaza iesirea standard si eroarea standard catre fisierul dirlist, in timp ce comanda:
ls 2>&1 > dirlist
directioneaza numai iesirea standard spre fisierul dirlist, căci eroarea standard a fost copiata ca iesire standard inainte ca iesirea standard sa fie redirectionata spre fisierul dirlist.
Redirectionarea Intrarii
Redirectionarea intrarii face ca fisierul al carui nume rezulta din expandarea cuvintului sa fie deschis pentru citire cu numarul n, sau va fi folosita intrarea standard (descriptor de fisier 0) daca n nu e specificat.
Formatul general pentru redirectionarea intrarii este:
[n]&<;cuvint
Redirectionarea Iesirii
Redirectionarea iesirii face ca fisierul al carui nume rezulta din expandarea cuvintului sa fie deschis pentru scriere cu numarul n, sau va fi folosita iesirea standard (descriptor de fisier 1) daca n nu e specificat. Daca fisierul nu exista, el este creat; daca exista, este redus la mărimea zero.
Formatul general pentru redirectionarea iesirii este:
[n]>cuvint
Daca operatorul de redirectionare este >|, atunci valoarea optiunii -C a comenzii interne set nu e testata, si se incearca sa se creeze fisierul. (Vezi si descrierea variabilei "noclobber" mai sus, la Variabile de Shell.
Iesirea Redirectionata cu Adaugare
Redirectionarea iesirii in acest mod face ca fisierul al carui nume rezulta din expandarea cuvintului sa fie deschis pentru adaugare (se scrie in el in continuare, la sfirsitul lui) cu numarul n, sau se foloseste iesirea standard (descriptor de fisier 1) daca n nu e specificat. Daca fisierul nu exista, el este creat.
Formatul general pentru adaugarea iesirii este:
[n]>>cuvint
Redirectionarea Iesirii Standard si a Erorii Standard
Bash-ul permite ca atit iesirea standard (descriptor de fisier 1) cit si eroarea standard (descriptor de fisier 2) sa fie redirectionate catre fisierul al carui nume rezulta din expandarea cuvintului.
Exista doua configurații de redirectionare a iesirii si erorii standard:
&>cuvint
si
>&cuvint
Dintre cele 2 forme, prima e preferata. Ea e echivalenta semantic cu:
>cuvint 2>&1
Redirectionarea tip Document Prezent
Acest tip de redirectionare programeaza shell-ul ca sa citeasca intrarea din sursa curenta pina cind apare un rind care contine doar cuvintul (fara spatii dupa el). Toate rindurile citite pina in acest punct vor fi folosite apoi ca intrare standard pentru o comanda.
Formatul acestei redirectionari este urmatorul:
<<[-]cuvint
document-prezent
delimitator
Asupra cuvintului nu se efectueaza nici o expandare de parametri, substituire de comenzi, expandare de cale de acces su expandare aritmetica.
Daca in cuvint exista caractere citate, delimitatorul este rezultatul inlaturarii semnelor citarii din cuvint, iar rindurile din documentul "aici" nu sunt expandate. Altfel, toate rindurile din documentul- prezent sunt supuse expandarii de parametri, substituirii de comenzi, si expandarii aritmetice. In ultimul caz, perechea \ este ignorata, iar \ trebuie folosit pentru a cita caracterele \, $ si `.
Daca operatorul de redirectionare este <<-, atunci toate caracterele TAB de la inceput de rind sunt eliminate din rindurile de intrare si din rindul ce contine delimitatorul. Aceasta permite ca documentele- prezente cuprinse in scripturi de shell sa fie indentate natural.
Duplicate ale Descriptorilor de Fisiere
Operatorul de redirectionare
[n]<&cuvint
e folosit pentru a face un duplicat al descriptorilor fisierelor de intrare. Daca cuvintul se expandeaza la una sau mai multe cifre, descriptorul de fisier desemnat de cifra n devine o copie a acelui descriptor de fisier. Daca cuvintul este evaluat la -, descriptorul de fisier n este inchis. Daca n nu e specificat, este folosita intrarea standard (descriptor de fisier 0).
Operatorul
[n]>&cuvint
e folosit in mod similar pentru a face duplicat al descriptorilor de fisiere de iesire. Daca n nu e specificat, se foloseste iesirea standard (descriptor de fisier 0). Ca un caz special, daca n e omis iar cuvintul nu se expandeaza la una sau mai multe cifre, iesirea si eroarea standard sunt redirectionate cum s-a descris mai sus.
Deschiderea Descriptorilor de Fisiere pentru Citire si Scriere
Operatorul de redirectionare
[n]<>cuvint
face ca fisierul al carui nume este expandarea cuvintului sa fie deschis atit pentru citire, cit si pentru scriere, cu descriptorul de fisier n, sau ca intrare standard si iesire standard daca n nu este specificat. Daca fisierul nu exista, el este creat.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
FUNCTII
O functie de shell, definita asa cum se descrie mai sus, la GRAMATICA SHELL-ULUI, stocheaza o înșiruire de comenzi pentru executie ulterioara. Functiile sunt executate in contextul shell-ului curent; nu e produs nici un proces nou ca sa le interpreteze (spre deosebire de executia unui script de shell). Cind este executata o functie, argumentele ei devin parametri pozitionali pe durata executiei sale. Parametrul special # este actualizat ca sa reflecte modificarea. Parametrul pozitional 0 ramine neschimbat.
Variabilele locale ale functiei pot fi declarate cu comanda interna "local". De regula, variabilele si valorile lor sunt accesate in comun de functie si de apelatorul ei.
Daca intr-o functie este executata comanda interna "return", functia se incheie si executia continua cu urmatoarea comanda de dupa apelul functiei. Cind o functie se incheie, valorile parametrilor pozitionali si a parametrului singular # sunt restaurate la valorile avute inainte de executia functiei.
Numele si definitiile functiilor pot fi listate cu optiunea -f la comenzile interne "declare" sau "typeset". Functiile pot fi exportate cu optiunea -f la comanda interna "export", astfel ca subshell-urile sa le aiba automat definite.
Functiile pot fi recursive. Nu se impune nici o limita asupra numarului de apeluri recursive.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
ALIAS-URI
Shell-ul pastreaza o lista de alias-uri (sinonime) care pot fi setate si desetate cu comenzile interne "alias" si "unalias" (vezi mai jos COMENZILE INTERNE DE SHELL). Primul cuvint al unei comenzi, daca nu e citat, e verificat daca nu are un alias. Daca are, acel text e inlocuit cu textul alias-ului. Numele alias-ului si textul pentru inlocuire pot contine orice intrare de shell valida, inclusiv metacaracterele listate mai sus, cu exceptia ca numele alias-ului nu poate contine semnul =. Primul cuvint al textului cu care se face inlocuirea este verificat daca nu contine alias-uri, dar un cuvint identic cu un alias deja expandat nu mai e expandat a doua oara. Asta inseamna ca se poate asocia comanda "ls" cu "ls -F", de exemplu, iar bash-ul nu va incerca sa expandeze recursiv textul de pus in loc. Daca ultimul caracter al valorii alias-ului este un blanc, atunci cuvintul care urmeaza dupa alias va fi si el verificat pentru expandarea de alias.
Alias-urile sunt create si listate cu comanda "alias", si sunt sterse cu comanda "unalias".
Nu exista nici un mecanism pentru folosirea argumentelor in textul de pus in loc, ca in shell-ul csh. Daca sunt necesare argumente, trebuie folosita o functie de shell.
Alias-urile nu sunt expandate cind shell-ul nu este interactiv.
Regulile ce guverneaza definirea si utilizarea alias-urilor sunt cam confuze. Bash-ul citeste intotdeauna cel putin un rind complet de intrare inainte de executarea oricarei comenzi de pe acel rind. Alias-urile sunt expandate cind o comanda este citita, si nu cind e executata. De aceea, o definitie de alias care apare in acelasi rind cu o alta comanda nu are consecință pina la citirea urmatorului rind de intrare. Asta inseamna ca noul alias nu afecteaza comenzile care il urmeaza pe acelasi rind. Acest comportament pune probleme si atunci cind se executa o functie. Alias-urile sunt expandate atunci cind se citeste definitia functiei, si nu cind este executata functia, deoarece insasi definitia unei functii este o comanda compusa. In consecinta, alias-urile definite in cadrul unei functii nu devin valabile decit dupa ce acea functie a fost executata. Pentru siguranta, definitiile de alias-uri se vor pune intotdeauna pe un rind separat, si nu se vor folosi alias-uri in comenzi compuse.
De retinut ca aproape in orice scopuri, alias-urile sunt inlocuite de functiile de shell.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
CONTROLUL JOB-URILOR
Controlul job-urilor se refera la abilitatea de a stopa (sau de a suspenda) in mod selectiv executia proceselor, si de a continua (relua) executia lor mai tirziu. De regula, utilizatorul foloseste aceasta facilitate printr-o interfata interactiva furnizata de cooperarea dintre driver-ul terminalului de sistem si bash.
Shell-ul asociaza un job fiecarei "pipeline". El pastreaza un tabel cu joburile aflate in executie curenta, care poate fi afisata cu comanda "jobs". Cind bash-ul porneste asincron un job (in fundal - in background), el afiseaza un rind care arata cam asa:
[1] 25647
indicind ca acest job este job-ul numarul 1 si ca identificatorul de proces (PID-ul) ultimului proces din "pipeline"-ul asociat acestui job este 25647. Toate procesele din acelasi "pipeline" fac parte din acelasi job. Bash-ul foloseste conceptul abstract de "job" ca baza a controlului job-urilor.
Pentru a facilita implementarea interfetei de utilizator pentru controlul job-urilor, sistemul pastreaza notiunea de identificator (ID) al grupului de procese al terminalului curent. Membrii acestui grup de procese (procese al caror ID de grup de procese este egal cu ID-ul grupului de procese al terminalului curent) primesc semnalele generate de tastatura, ca de exemplu SIGINT. Se spune ca aceste procese sunt in prim-plan (in "foreground"). Procesele din background sunt acelea al caror ID de grup de procese e diferit de cel al terminalului curent; astfel de procese sunt imune la semnalele generate de tastatura. Numai proceselor din foreground li se permite sa citeasca de la terminal sau sa scrie la terminal. Proceselor din background ce incearca sa citeasca de la (sau sa scrie la) terminal li se trimite un semnal SIGTTIN (SIGTTOU) de catre driver-ul de terminal, care, in afara de cazul ca este interceptat, suspenda procesul.
Daca sistemul de operare pe care ruleaza bash-ul suporta controlul job-urilor, bash-ul iti permite sa-l folosesti. Introducerea de la tastatura a caracterului de suspendare (de regula ^Z, Control-Z) in timpul executiei unui proces provoaca stoparea acelui proces si revenirea ta in bash. Introducerea caracterului de suspendare cu intirziere (de regula ^Y, Control-Y) face ca procesul sa fie stopat atunci cind incearca sa citeasca intrarea de la terminal, si controlul va fi returnat bash-ului. Apoi poti manipula starea acelui job folosind comanda "bg" pentru a-l continua in background, comanda "fg" pentru a-l continua in foreground, sau comanda "kill" pentru a-l elimina complet. Un ^Z are efect imediat, si are efectul secundar ca vor fi neglijate iesirile si intrarile aflate in asteptare.
Exista mai multe metode de a face referire la un job din shell. Caracterul % introduce un nume de job. Numarul de job n poate fi referit ca %n. Un job mai poate fi referit si folosind un prefix al numelui folosit pentru a-l lansa, sau folosind un substring care apare in linia lui de comanda. De pilda, %ce se refera la un job "ce" stopat. Daca un prefix coincide cu mai mult de un job, bash-ul va raporta o eroare. Pe de alta parte, folosirea aspectului $?ce se refera la orice job care contine stringul "ce" in linia sa de comanda. Daca substringul coincide cu mai mult de un job, bash-ul raporteaza o eroare. Simbolurile %% su=i %+ se refera la notiunea shell-ului de job curent, care este ultimul job ce a fost stopat pe cind era in foreground. Jobul precedent poate fi referit ca %-. In iesirile care se refera la job-uri (adica in iesirile comenzii "jobs"), job-ul curent este marcat totdeauna cu un +, iar jobulprecedent cu un -.
Simpla numire a unui job poate fi folosita pentru a-l asigură in prim- plan (in foreground): %1 este sinonim cu ``fg %1'', aducind jobul 1 din background in foreground. In mod similar, ``%1 &'' continua jobul 1 in background, fiind echivalent cu ``bg %1''.
Shell-ul afla imediat cind un job isi schimba starea. In mod normal, bash-ul asteapta pina cind urmeaza sa afiseze un prompt, pentru a raporta schimbarile din starea unui job, astfel incit sa nu intrerupa alta iesire. Daca este setata optiunea -b a comenzii interne "set", bash-ul raporteaza imediat asemenea schimbari. (Vezi si descrierea variabilei "notify" mai sus, la Variabile de Shell.)
Daca incerci sa iesi din bash in timp ce exista job-uri stopate, shell-ul afiseaza un mesaj de avertizare. Poti folosi apoi comanda "jobs" pentru a le inspecta starea. Daca faci asta, sau daca incerci fără întârziere sa iesi iarasi, nu mai esti avertizat si job-urile stopate sunt terminate.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
SEMNALE
Cind bash-ul este interactiv, el ignora SIGTERM (astfel incit comanda "kill 0" nu elimina un shell interactiv), iar SIGINT este captat si tratat (astfel incit comanda interna "wait" poate fi intrerupta). In toate cazurile, bash-ul ignora SIGQUIT. Daca este in functiune controlul job-urilor,bash-ul ignora SIGTTIN, SIGTTOU si SIGTSTP.
Job-urile sincrone lansate de bash au semnale setate la valorile mostenite de shell de la parintele lui. Cind controlul job-urilor nu este in functiune, job-urile din background (cele lansate cu &) ignora SIGINT si SIGQUIT. Comenzile lansate ca rezultat al substituirii de comenzi ignora semnalele de control al job-urilor generate de tastatura: SIGTTIN, SIGTTOU si SIGTSTP.
| Optiuni | Argumente | Definitii | Cuvinte rezervate | Gramatica shell-ului | Variabile de shell | Expandarea | Redirectionarea | Functii | Aliasuri | Controlul joburilor | Semnale | Executia comenzilor | Mediul | Starea de iesire | Afisarea promptului | Biblioteca Readline | Istoricul | Evaluarea aritmetica | Comenzile interne de shell | Invocarea shellului |
EXECUTIA COMENZILOR
Dupa ce o comanda a fost despartita in cuvinte, daca rezultatul este o comanda simpla si o lista optionala de argumente, sunt intreprinse urmatoarele actiuni:
Daca numele comenzii nu contine slash-uri, shell-ul incearca sa o localizeze. Daca exista o functie de shell cu acel nume, acea functie este invocata dupa cum este descris mai sus la FUNCTII. Daca numele nu corespunde unei functii, shell-ul il cauta in lista comenzilor sale interne. Daca este identificata in lista, acea comanda interna este invocata.
Daca numele comenzii nu reprezinta nici o functie de shell si nici o comanda interna, si nu contine slash-uri, bash-ul cauta in fiecare element al variabilei PATH un director continind un fisier executabil cu acel nume. Daca aceasta cautare esueaza, shell-ul afiseaza un mesaj de eroare si intoarce o stare de iesire diferita de zero.
Daca are succes cautarea, sau daca numele comenzii contine unul sau mai _________________ [url=http://everyone.page.tl/]Cine nu munceste nu greseste, iar cine nu greseste merita sa fie promovat.[/url]
[url=http://everyone.page.tl/] [/url] |
|