Acest fisier este inca in lucru. Daca unele rubrici au greseli de afisare sau lipseste continutul, REVENITI ca sa il gasiti terminat.

Comenzile shell-ului bash

traduse de AdiM 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 | Starea 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 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.

| 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. 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 |

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 prima 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 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 |

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 speciale 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 speciali * si @ au semnificatii speciale 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 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 pozitionali

Un 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 Speciali

Shell-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.

| 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 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.

| 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 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 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 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 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 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 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, rezultate 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 imediat 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 speciale 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 folosind 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, deoarece 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 lungimea 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 forme 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 serie de comenzi pentru executie ulterioara. Functiile sunt executate in contextul shell-ului curent; nu e creat 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 special # 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 efect 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, precum 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 formei $?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 aduce 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 imediat 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 multe slash-uri, shell-ul executa programul respectiv. Argumentul 0 este setat la numele dat, iar urmatoarele argumente ale comenzii sunt setate la argumentele date, daca acestea exista.

Daca aceasta executie esueaza din cauza ca fisierul nu este in format executabil, si nu este nici un director, se presupune ca este vorba de un script de shell, un fisier care contine comenzi de shell. Atunci este generat un subshell pentru a-l executa. Acest subshell se reinitializeaza el insusi, ca si cum ar fi fost invocat un nou shell pentru a trata script-ul, cu deosebirea ca locatiile comenzilor, asa cum si le aminteste procesul parinte (vezi "hash" mai jos, la COMENZI INTERNE DE SHELL) sunt pastrate si de fiu.

Daca programul este un fisier care incepe cu #!, atunci restul primei linii specifica un interpretor pentru program. Shell-ul executa interpretorul specificat pe sisteme de operare care nu pot folosi acest format executabil. Argumentele interpretorului constau intr-un singur argument optional, urmind dupa numele interpretorului in prima linie a programului, si urmat de numele programului si apoi de argumentele comenzii, daca exista argumente.


| 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 |

MEDIUL

Cind este invocat un program, i se da un tablou de string-uri denumit mediu ("environment"). Aceasta e o lista de perechi nume-valoare, de forma nume=valoare.

Shell-ul iti permite sa manevrezi mediul in mai multe moduri. La apelare, shell-ul verifica propriul sau mediu si creeaza un parametru pentru fiecare nume gasit, marcindu-l automat pentru a-l exporta proceselor-fiu. Comenzile executate mostenesc mediul. Comenzile "export" si "declare -x" permit adaugarea si stergerea parametrilor si functiilor din mediu. Daca valoarea unui parametru din mediu este modificata, noua valoare devine parte a mediului, inlocuind-o pe cea veche. Mediul mostenit de orice comenzi executate consta in mediul initial al shell-ului, ale carui valori pot fi modificate in shell, minus perechile inlaturate de comanda "unset", si plus orice adaugiri facute prin comenzile "export" si "declare -x"

Mediul oricarei comenzi simple sau functii poate fi marit temporar prin prefixarea lui cu atribuiri de parametri, asa cum se descrie mai sus la PARAMETRI. Aceste instructiuni de atribuire afecteaza numai mediul vazut de comanda respectiva.

Daca flagul -k este setat (vezi mai jos comanda interna "set"), atunci toate atribuirile de parametri sunt plasate in mediu pentru comanda, si nu numai acelea care preceda numele comenzii.

Cind bash-ul invoca o comanda externa, variabila _ este setata la numele caii de acces complete a comenzii si este trecuta acelei comenzi in mediul sau.


| 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 |

STAREA DE IESIRE

Pentru scopurile shell-ului, o comanda care iese din executie cu starea de iesire zero este considerata reusita. O stare de iesire diferita de zero indica nereusita. Cind o comanda se incheie datorita unui semnal fatal, bash-ul foloseste valoarea 128+semnalul ca stare de iesire.

Daca o comanda nu este gasita, procesul-fiu creat pentru a o executa intoarce starea de iesire 127. Daca o comanda este gasita dar nu este executabila, starea intoarsa este 126.

Bash-ul insusi intoarce starea de iesire a ultimei comenzi executate, in afara de cazul unei erori de sintaxa, caz cind el iese cu o valoare non-zero. Vezi mai jos si comanda interna "exit".


| 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 |

AFISAREA PROMPTULUI

Cind este executat interactiv, bash-ul afiseaza promptul principal PS1 atunci cind este gata sa citeasca o comanda, si promptul secundar PS2 atunci cind are nevoie de intrari suplimentare pentru a incheia o comanda. Bash-ul permite modificarea dupa dorinta a acestor string-uri de prompt, prin introducerea unor caractere speciale, precedate de \, cu semnificatiile urmatoare:
\t
ora curenta in formatul HH:MM:SS
\d
data in formatul "Zi-din-saptamina Luna Zi-din-luna" (de exemplu, in engleza, "Tue May 26")
\n
newline
\s
numele shell-ului, numele de baza al lui $0 (portiunea de dupa ultimul slash)
\w
directorul curent de lucru
\W
numele de baza al directorului curent de lucru
\u
numele de cont al utilizatorului curent
\h
numele host-ului
\#
numarul comenzii curente
\!
numarul in istoric al acestei comenzi
\$
daca UID-ul efectiv este 0, atunci un #, altfel un $
\nnn
caracter corespunzator numarului octal nnn
\\
un backslash
\[
incepe o secventa de caractere netiparibile, care ar putea fi folosite pentru a insera in prompt o secventa de control al terminalului
\]
incheie o secventa de caractere netiparibile
Numarul comenzii si numarul de istoric sunt, de regula, diferite: numarul din istoric al unei comenzi este pozitia sa in lista-istoric, care poate sa includa comenzi restaurate din fisierul-istoric (vezi mai jos HISTORY), pe cind numarul comenzii este pozitia ei in cadrul secventei de comenzi executate in timpul sesiunii curente de shell. Dupa ce string-ul este decodificat, el este expandat prin expandarea parametrilor, substituirea de comenzi, expandarea aritmetica si despartirea cuvintelor.
| 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 |

READLINE

Aceasta este biblioteca prin care se face citirea intrarii atunci cind se foloseste un shell interactiv, in afara de cazul cind s-a dat optiunea -nolineediting. In mod implicit, comenzile de editare a liniei de comanda sunt similare cu cele din editorul emacs. Este disponibila si o interfata in stilul editorului vi.

In aceasta sectiune, pentru a denumi combinatiile de taste se foloseste notatia de tip emacs. Tastele de Control sunt desemnate prin tasta C-, de ex. C-n inseamna Control-N. In mod similar, meta- tastele sunt denumite M-, astfel incit M-x inseamna Meta-X. (Pe tastaturile fara tasta Meta, M-x inseamna ESC x, adica se apasa tasta Escape si apoi tasta x. Aceasta face ca ESC sa fie meta-prefix. Combinatia M-C-x inseamna ESC-Control-x, sau se apasa tasta Escape si apoi, tinind apasata tasta Control, se apasa tasta x).

Asignarile de taste implicite pot fi schimbate cu un fisier ~/.inputrc. Valoarea variabilei de shell INPUTRC, daca este setata, este folosita in locul fisierului ~/.inputrc. Celelalte programe care folosesc aceasta biblioteca isi pot adauga propriile lor comenzi si asignari de taste.

De exemplu, punind

	      M-Control-u: universal-argument
ori
	      C-Meta-u: universal-argument
in fisierul ~/.inputrc va face ca la combinatia M-C-u sa se execute comanda de citire universal-argument.

Sunt recunoscute urmatoarele nume simbolice de caractere: RUBOUT, DEL, ESC, LFD, NEWLINE, RET, RETURN, SPC, SPACE, si TAB. Pe linga numele de comenzi, readline permite asocierea combinatiilor de taste cu un sur de caractere care este inserat atunci cind este apasata combinatia de taste (un macro).

Readline este configurata punind comenzi intr-un fisier de initializare. Numele acestui fisier este luat din valoarea variabilei INPUTRC. Daca aceasta variabila nu este setata, fisierul implicit e ~/.inputrc. Cind este pornit un program care foloseste biblioteca readline, fisierul de initializare este citit si sunt setate asignarile de taste si variabilele. Exista doar citeva structuri de baza care sunt permise in fisierul de initializare pentru readline. Rindurile goale sunt ignorate. Rindurile care incep cu # sunt comentarii. Rindurile care incep cu $ indica structuri conditionale. Celelalte rinduri desemneaza asignari de taste si setari de variabile.

Sintaxa pentru controlul asignarilor de taste in fisierul ~/.inputrc este simpla. Tot ce se cere este numele comenzii sau textul unui macro si o combinatie de taste cu care se asociaza acestea. Numele poate fi specificat in unul din urmatoarele 2 moduri: ca nume simbolic de tasta, posibil cu prefixuri Meta- sau Control-, sau ca o combinatie de taste. Cind se foloseste forma "nume-tasta:nume-functie sau macro, nume-tasta este numele unei taste exprimate desfasurat in engleza. De exemplu:

	      Control-u: universal-argument
	      Meta-Rubout: backward-kill-word
	      Control-o: ">&output"
In exemplul de mai sus, combinatia C-u este asociata cu functia universal-argument, M-DEL este asociata functiei backward-kill-word, iar C-o este programata sa execute macroul dintre ghilimele (adica sa insereze in linie textul dintre ghilimele).

In a doua forma, "secv-taste":nume-functie sau macro, secv-taste difera de nume-tasta de mai sus prin faptul ca sirurile de caractere care desemneaza o secventa (succesiune) de taste pot fi specificate plasind secventa intre ghilimele. Pot fi folosite unele taste de escape de tip GNU Emacs, ca in exemplul urmator:

	      "\C-u": universal-argument
	      "\C-x\C-r": re-read-init-file
	      "\e[11~": "Function Key 1"
In acest exemplu, C-u e iarasi asociat functiei universal-argument. Secventa C-x C-r este asociata functiei re-read-init-file, iar secventa ESC [ 1 1 ~ este programata sa insereze textul dintre ghilimele, din dreapta (Function Key 1).

Iata tot setul de secvente de escape:

\C-
prefix control
\M-
prefix meta
\e
caracterul Escape
\\
backslash
\"
literal " (ghilimea)
\'
literal ' (apostrof)
Cind se introduce textul unui macro, trebuie folosite ghilimelele simple (apostroafe) sau duble pentru a desemna definitia unui macro. Textul necitat se presupune a fi un nume de functie. Backslash-ul va cita orice caracter din textul macro-ului, inclusiv " si '.

Bash-ul pernite afisarea sau modificarea asignarilor curente de taste pentru biblioteca readline cu ajutorul comenzii interne "bind". Modul de editare poate fi comutat in timpul sesiunii interactive prin folosirea optiunii -o in comanda interna "set" Vezi mai jos COMENZI INTERNE DE SHELL).

Biblioteca readline are variabile care pot fi folosite pentru a-i modela ulterior comportarea. O variabila poate fi setata in fisierul .inputrc cu o instructiune de forma:

	      set nume-variabila valoare
In afara cazurilor specificate altfel, variabilele bibliotecii readline pot lua valorile On sau Off. Variabilele si valorile lor implicite sunt urmatoarele:
horizontal-scroll-mode (Off)
Cind este On, face ca readline sa foloseasca un singur rind pentru afisare, intrarea defilind pe orizontala pe o singura linie din ecran atunci cind devine mai lunga decit latimea ecranului, in loc sa treaca pe un rind nou mai jos.
editing-mode (emacs)
Stabileste daca readline incepe cu un set de asignari de taste de tip emacs sau vi. Variabila poate fi setata la valoarea emacs sau vi.
mark-modified-lines (Off)
Daca este On, rindurile din istoric care au fost modificate sunt afisate precedate de un asterisc (*).
bell-style (audible)
Controleaza ce se intimpla atunci cind readline vrea sa faca sa sune bip-ul terminalului. Daca este setata la valoarea none atunci readline nu va genera nici un bip. Daca este setata la valoarea visible, readline foloseste un bip vizibil, daca are asa ceva la dispozitie. Daca este setata ca audible, readline incearca sa activeze bip-ul sonor al terminalului.
comment-begin (``#'')
Sirul care este inserat in modul vi atunci cind este executata o comanda vi.
meta-flag (Off)
Daca este On, readline va permite intrarea pe 8 biti (deci nu va inlatura bitul superior din caracterele citite), indiferent de ceea ce ar pretinde terminalul ca suporta.
convert-meta (On)
Daca este On, readline va converti caracterele care au bitul 8 setat intr-o secventa de coduri ASCII prin inlaturarea bitului respectiv si precedarea caracterului cu un caracter Escape (de fapt se foloseste Escape ca meta-prefix).
output-meta (Off)
Daca este On, readline va afisa direct caracterele cu bitul 8 setat, in loc sa le transforme in secventa meta-prefixata cu Escape.
completion-query-items (100)
Aceasta stabileste cind i se cere utilizatorului sa opteze in legatura cu vizualizarea numarului de completari posibile generat de comanda possible-completions. Poate fi setata la orice valoare intreaga mai mare sau egala cu zero. Daca numarul de completari posibile este mai mare sau egalk cu valoarea acestei variabile, utilizatorul este intrebat daca doreste sau nu sa le vada; altfel, ele sunt listate direct la terminal. terminal.
keymap (emacs)
Seteaza keymap-ul (harta tastelor) curent. Setul de keymap-uri legale este: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, si vi-insert. vi este echivalent cu vi-command; emacs e echivalent cu emacs-standard. Valoarea implicita este emacs; si valoarea lui editing-mode afecteaza keymap-ul implicit.
show-all-if-ambiguous (Off)
Aceasta determina comportarea implicita a functiilor de completare. Daca este On, cuvintele care au mai mult de o singura posibila completare fac ca respectivele completari sa fie listate imediat, in loc sa sune bip-ul.
expand-tilde (Off)
Daca este On, se executa expandarea de tilda atunci cind readline incearca o completare a unui cuvint.
Readline implementeaza o facilitate similara in esenta cu directivele conditionale de compilare ale preprocesorului de C, care permite sa se faca asignari de taste si setari de variabile in functie de rezultatul testelor. Sunt folosite 3 directive de parser.
$if
Permite asignari de taste in functie de modul de editare, de terminalul folosit sau de aplicatia care foloseste readline. Textul testului se intinde pina la sfirsitul rindului; nu sunt necesare caractere care sa-l separe.
mode
Forma mode= a directivei $if este folosita pentru a testa daca readline este in modul emacs sau vi. Aceasta poate fi folosita impreuna cu comanda "set keymap", de pilda spre a seta asignarile din keymap-urile "emacs- standard" si "emacs-ctlx", numai daca readline incepe sa lucreze in modul emacs.
term
Forma term= poate fi inclusa pentru a include asignari de taste specifice terminalului, de pilda pentru a asocia treimiterea unei secvente de taste cu tastele functionale ale terminalului. Cuvintul de la dreapta semnului = este comparat cu numele complet al tipului de terminal si cu portiunea din numele terminalului aflata inainte de primul caracter "-". Aceasta permite ca "sun" sa se identifice atit cu "sun", cit si cu "sun-cmd", de exemplu.
application
Constructia aceasta este folosita pentru a include setari specifice unei aplicatii. Fiecare program care foloseste biblioteca readline stabileste numele aplicatiei, iar fisierul de initializare poate cauta o anumita valoare. Aceasta ar putea fi folosita pentru a asocia secventele de taste cu functiile utile intr-un anumit program. De pilda, urmatoarea comanda adauga o secventa de taste care citeaza cuvintul curent sau pe cel precedent, astfel:
		     Bash:
		     $if Bash
		     # Quote the current or previous word
		     "\C-xq": "\eb\"\ef\""
		     $endif
$endif
Aceasta comanda, dupa cum s-a vazut in exemplul precedent, incheie o comanda $if.
$else
Comenzile din aceasta ramura a directivei $if sunt executate daca testul da un rezultat negativ.
Comenzile bibliotecii readline pot primi argumente numerice, care actioneaza, in mod normal, ca numarare a repetarilor. Totusi, uneori este important semnul argumentului. Dind un argument negativ, unei comenzi care actioneaza in directia "inainte" (de ex. kill-line) face ca acea comanda sa actioneze indarat. Comenzile ale caror argumente deviaza de la aceasta comportare sunt scoase in evidenta.

Cind o comanda e descrisa ca eliminind ("kill") text, textul sters este salvat pentru o eventuala recuperare ulterioara ("yanking"). Textul eliminat este salvat intr-un asa-numit "kill-ring". Eliminarile de text succesive determina acumularea de text in acest "kill-ring", text care poate fi recuperat tot deodata. Comenzile care nu "ucid" ("kill") text separa buxcatile de text in zona numita "kill-ring".

Urmeaza o lista cu numele comenzilor si cu secventele implicite de taste care le sunt asociate.

Comenzi pentru deplasarea cursorului

beginning-of-line (C-a)
Muta cursorul la inceputul liniei curente.
end-of-line (C-e)
Muta cursorul la sfirsitul liniei curente.
forward-char (C-f)
Muta cursorul inainte cu un caracter.
backward-char (C-b)
Muta cursorul inapoi cu un caracter.
forward-word (M-f)
Muta cursorul inainte, la sfirsitul cuvintului urmator. Cuvintele sunt compuse din caractere alfanumerice (litere si cifre).
backward-word (M-b)
Muta cursorul inapoi, la inceputul cuvintului curent, sau al cuvintului precedent (daca era la inceput de cuvint sau intre cuvinte). Cuvintele sunt compuse din caractere alfanumerice (litere si cifre).
clear-screen (C-l)
Sterge ecranul, lasind linia curenta sus, pe ecran. Cu un argument, reimprospateaza linia curenta fara a sterge ecranul.
redraw-current-line
Rescrie pe ecran linia curenta. In mod implicit, aceasta comanda nu e asignata unei secvente de chei.

Comenzi pentru manipularea istoricului

accept-line (Newline, Return, Enter)
Accepta linia indiferent unde se afla cursorul. Daca linia nu este goala, o adauga la lista istoricului in functie de starea variabilei HISTCONTROL. Daca linia este o linie din istoric modificata, atunci restaureaza linia din istoric la starea ei originala.
previous-history (C-p)
Extrage comanda precedenta din lista istoric, mergind inapoi prin lista.
next-history (C-n)
Extrage comanda urmatoare din lista istoric, mergind inainte prin lista.
beginning-of-history (M-&<;)
Sare la prima linie din istoric.
end-of-history (M-&>;)
Sare la sfirsitul istoricului, adica la linia care tocmai este introdusa.
reverse-search-history (C-r)
Cauta inapoi in lista istoric, incepind cu linia curenta. Este o cautare incrementala (repetarea combinatiei C-r are ca efect cautarea mai departe a aceluiasi item).
forward-search-history (C-s)
Cauta inainte in lista istoric, incepind cu linia curenta. Este o cautare incrementala (repetarea combinatiei C-s are ca efect cautarea mai departe a aceluiasi item).
non-incremental-reverse-search-history (M-p)
Cauta inapoi prin lista istoric - cautare neincrementala - un sir furnizat de utilizator.
non-incremental-forward-search-history (M-n)
Cauta inainte prin lista istoric - cautare neincrementala - un sir furnizat de utilizator.
history-search-forward
Cauta inainte, in istoric, sirul de caractere de la inceputul liniei curente si pina la punctul curent. Este o cautare neincrementala. Implicit, comanda nu este asignata.
history-search-backward
Cauta inapoi, in istoric, sirul de caractere de la inceputul liniei curente si pina la punctul curent. Este o cautare neincrementala. Implicit, comanda nu este asignata.
yank-nth-arg (M-C-y)
Insereaza primul argument al comenzii precedente (de regula, al doilea cuvint din linia precedenta) la pozitia curenta a cursorului. Cu un argument n, insereaza al n-lea cuvint din comanda precedenta (numerotarea incepe de la 0 pentru cuvintele comenzii precedente). Un argument negativ insereaza al n-lea cuvint numarat de la sfirsitul comenzii precedente.
yank-last-arg (M-., M-_)
Insereaza ultimul argument al comenzii precedente (ultimul cuvint din linia precedenta). Cu un argument, se comporta ca si comanda yank-nth-arg.
shell-expand-line (M-C-e)
Expandeaza linia asa cum o face shell-ul cind o citeste. Se face expandarea de alias-uri si de istoric, ca si toate expandarile de cuvinte facute de shell. Vezi si EXPANDAREA DE ISTORIC.
history-expand-line (M-^)
Realizeaza expandarea de istoric a liniei curente. Vezi si EXPANDAREA DE ISTORIC.
insert-last-argument (M-., M-_)
Un sinonim pentru yank-last-arg.
operate-and-get-next (C-o)
Accepta linia curenta pentru a o executa si extrage urmatoarea linie dupa cea curenta, pentru editare. Orice argument este ignorat.

Comenzi pentru modificarea textului

delete-char (C-d)
Sterge caracterul de la pozitia cursorului. Cind cursorul se afla la inceputul liniei, in linie nu sunt caractere si ultimul caracter scris nu a fost C-d, atunci intoarce EOF.
backward-delete-char (Rubout)
Sterge caracterul din urma cursorului (din stinga lui). Cind i se da un argument numeric, salveaza textul sters in asa-zisul "kill-ring".
quoted-insert (C-q, C-v)
Adauga literal in rind urmatorul caracter introdus de la tastatura. Asa se poate insera, de exemplu, caracterul C-q.
tab-insert (C-v TAB)
Insereaza un caracter tab.
self-insert (a, b, A, 1, !, ...)
Insereaza caracterul introdus de la tastatura.
transpose-chars (C-t)
Trage inainte caracterul dinaintea pozitiei curente a cursorului, dincolo de caracterul aflat in pozitia curenta. Cursorul se muta si el inainte. Daca pozitia cvurenta este la sfirsitul rindului, atunci sunt inverstae intre ele cele doua caractere dinaintea cursorului. Argumentele negative nu functioneaza.
transpose-words (M-t)
Trage cuvintul din urma cursorului dupa cuvintul din fata cursorului, mutind si cursorul peste acel cuvint.
upcase-word (M-u)
Schimba literele cuvintului curent (sau urmator) in litere mari (majuscule). Cu un argument negativ face acest lucru cu cuvintul precedent, dar nu muta cursorul.
downcase-word (M-l)
Schimba literele cuvintului curent (sau urmator) in litere mici. Cu un argument negativ face acest lucru cu cuvintul precedent, dar nu muta cursorul.
capitalize-word (M-c)
Schimba prima litera a cuvintului curent (sau urmator) in majuscula. Cu un argument negativ face acest lucru cu cuvintul precedent, dar nu muta cursorul.

Stergere [Killing] si Lipire [Yanking]

kill-line (C-k)
Sterge textul de la pozitia curenta a cursorului pina la sfirsitul liniei.
backward-kill-line (C-x C-Rubout)
Sterge indarat pina la inceputul rindului.
unix-line-discard (C-u)
Sterge indarat de la cursor pina la inceputul liniei.
kill-whole-line
Sterge toate caracterele liniei curente, indiferent unde se afla cursorul.
kill-word (M-d)
Sterge de la cursor pina la sfirsitul cuvintului curent, sau, daca pozitia curenta a cursorului e intre cuvinte, pina la sfirsitul cuvintului urmator. Limitele cuvintului sunt cele folosite de forward-word.
backward-kill-word (M-Rubout)
Sterge cuvintul din urma cursorului. Limitele cuvintului sunt cele folosite de forward-word.
unix-word-rubout (C-w)
Sterge cuvintul de dupa cursor, folosind spatiile pentru a delimita cuvintele. Delimitarea cuvintelor este diferita de cea de la backward-kill-word.
delete-horizontal-space
Sterge toate spatiile si tab-urile din jurul pozitiei curente a cursorului. Implicit, aceasta comanda nu are tasta asociata.
yank (C-y)
Lipeste ultimul segment din "kill-ring" in buffer la cursor.
yank-pop (M-y)
Roteste "kill-ring"-ul, si lipeste noul sau virf. Functioneaza numai dupa yank sau yank-pop.

Argumente Numerice

digit-argument (M-0, M-1, ..., M--)
Adauga aceasta cifra la argumentul care deja se acumuleaza, sau incepe un argument nou. M-- incepe un argument negativ.
universal-argument
De fiecare data cind este executata aceasta functie, contorul de argumente creste de 4 ori. Initial el este 1, deci la prima executare a functiei, el devine 4. Implicit, aceasta functie nu este asignata vreunei taste.

Completare

complete (TAB)
Incearca sa realizeze completarea textului din fata pozitiei curente a cursorului. Bash incearca sa-l completeze tratindu-l ca variabila (daca textul incepe cu $), ca nume de utilizator (daca textul incepe cu ~), ca nume de host (daca incepe cu @) sau comanda (incluzind alias-uri si functii), pe rind. Daca nici una din acestea nu produce o completare, se incearca o completare ca nume de fisier.
possible-completions (M-?)
Listeaza completarile posibile pentru textul din fata pozitiei curente a cursorului.
insert-completions
Insereaza toate completarile textului din fata pozitiei curente a cursorului, care ar fi fost generate de functia possible-completions. Implicit, aceasta functie nu este asignata vreunei taste.
complete-filename (M-/)
Incearca sa completeze textul din fata pozitiei curente a cursorului cu un nume de fisier.
possible-filename-completions (C-x /)
Listeaza completarile posibile ale textului din fata pozitiei curente a cursorului, tratindu-l ca nume de fisier.
complete-username (M-~)
Incearca sa completeze textul din fata pozitiei curente a cursorului, tratindu-l ca nume de utilizator.
possible-username-completions (C-x ~)
Listeaza completarile posibile ale textului din fata pozitiei curente a cursorului, tratindu-l ca nume de utilizator.
complete-variable (M-$)
Incearca sa completeze textul din fata pozitiei curente a cursorului, tratindu-l ca variabila de shell.
possible-variable-completions (C-x $)
Listeaza completarile posibile ale textului din fata pozitiei curente a cursorului, tratindu-l ca nume de utilizator.
complete-hostname (M-@)
Incearca sa completeze textul din fata pozitiei curente a cursorului, tratindu-l ca nume de host.
possible-hostname-completions (C-x @)
Listeaza completarile posibile ale textului din fata pozitiei curente a cursorului, tratindu-l ca nume de host.
complete-command (M-!)
Incearca sa completeze textul din fata pozitiei curente a cursorului, tratindu-l ca nume de comanda. Completarea comenzii cauta sa compare textul cu alias-uri, cuvinte rezervate, functii de shell, comenzi interne, si in final, nume de fisiere executabile, in ordinea data.
possible-command-completions (C-x !)
Listeaza completarile posibile ale textului din fata pozitiei curente a cursorului, tratindu-l ca nume de comanda.
dynamic-complete-history (M-TAB)
Incearca sa completeze textul din fata pozitiei curente a cursorului, comparind textul cu liniile din lista istoric.
complete-into-braces (M-{)
Realizeaza completarea cu nume de fisiere si intoarce lista completarilor posibila, inclusa intre acolade, astfel incit lista sa fie la dispozitia shell-ului (vezi Expandarea de Acolade mai sus).

Macroinstructiuni introduse de la tastatura

start-kbd-macro (C-x ()
Incepe sa salveze in macroinstructiunea curenta caracterele introduse de la tastatura.
end-kbd-macro (C-x ))
Incheie salvarea in macroinstructiunea curenta a caracterelor introduse si salveaza definitia.
call-last-kbd-macro (C-x e)
Re-executa ultima macroinstructiune definita, facaind sa apara caracterele din macro ca si cum ar fi introduse de la taste.

Diverse

re-read-init-file (C-x C-r)
Citeste continutul fisierului tau de initializare si activeaza orice asocieri si asignari de variabile gasite acolo.
abort (C-g)
Abandoneaza comanda in curs de editare si face sa sune beep-ul terminalului (asta depinde de setarea beep-ului).
do-uppercase-version (M-a, M-b, ...)
Executa comanda asociata majusculei respective.
prefix-meta (ESC)
Prefixeaza cu Meta urmatorul caracter introdus. ESC f este echivalent cu Meta-f.
undo (C-_, C-x C-u)
Undo incremental, memorind separat fiecare linie.
revert-line (M-r)
Anuleaza toate modificarile facute liniei curente. E similar cu repetarea comenzii undo pina se ajunge la starea initiala a liniei curente.
tilde-expand (M-~)
Executa expandarea de tilda asupra cuvintului curent.
dump-functions
Afiseaza toate functiile si tastele asociate lor in bufferul de iesire pentru readline. Daca se da un argument numeric, iesirea este formatata in asa fel incit sa poata fi inclusa intr-un fisier .inputrc
display-shell-version (C-x C-v)
Afiseaza versiunea instantei curente de bash.

| 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 |

ISTORICUL

Cind este interactiv, shell-ul ofera accesul la istoricul comenzilor, lista comenzilor introduse anterior. Textul lor, sau ultimele comenzi (numarul lor este fixat prin HISTSIZE, implicit fiind 500) se salveaza intr-o lista de istoric. Shell-ul sticheaza fiecare comanda in lista istoric inainte de expandarea de parametri si de variabile (vezi mai sus EXPANDAREA), dar dupa ce se efectueaza expandarea de istoric, supusa valorilor variabilelor de shell command_oriented_history si HISTCONTROL. La pornire, istoricul este initializat din fisierul denumit de variabila HISTFILE (implicit ~/.bash_history). HISTFILE este trunchiat, eventual, ca sa contina maximum HISTFILESIZE linii. Comanda interna "fc" (vezi mai jos si COMENZILE INTERNE DE SHELL) poate fi folosita pentru a edita sau re-executa o portiune din lista-istoric. Comanda interna "history" poate fi folosita pentru a afisa lista istoric si pentru a manipula fisierul istoric. Cind se face editarea liniei de comanda, sunt disponibile, in fiecare mod de editare, comenzi de cautare care permit accesul la lista istoric. Cind se iese din shellul interactiv, ultimele HISTSIZE linii sunt copiate din lista istoric in fisierul desemnat de HISTFILE. Daca HISTFILE nu e setata, sau daca fisierul istoric nu poate fi scris, istoricul nu e salvat.

EXPANDAREA DE ISTORIC

Shell-ul suporta o expandare de istoric care e similara cu cea din csh. Aceasta sectiune descrie sintaxa valabila. Procedura aceasta e activa in mod implicit pentru shell-uri interactive, si poate fi dezactivata folosind optiunea +H a comenzii interne "set" (vezi si COMENZILE INTERNE DE SHELL, mai jos). Shell-urile non-interactive nu realizeaza expandarea de istoric.

Expandarea de istoric este realizata imediat dupa ce este citita o linie completa, inainte ca shell-ul sa o desfaca in cuvinte. Are loc in doua parti. Prima determina ce linie din istoricul precedent trebuie folosita pentru substituire. A doua selecteaza portiunile din acea linie pe care le va include in linia curenta. Linia selectata din istoricul precedent este evenimentul cautat, iar portiunile din ea asupra carora se actioneaza sunt cuvinte. Linia este desfacuta in cuvinte in acelasi fel ca la citirea intrarii, astfel incit acele cuvinte delimitate prin metacaractere si intre ghilimele sunt considerate ca un singur cuvint. Numai backslash-ul (\) si apostroafele (') pot cita caracterul de escape al istoricului, care in mod implicit este !.

Shell-ul permite controlul diferitelor caractere folosite pentru mecanismul expandarii de istoric (vezi descrierea variabilei histchars mai sus, la VARIABILE DE SHELL).

Semnificatori de Evenimente

Un semnificator de eveniment este o referire la o intrare (linie de comanda) din lista istoric.
!
Incepe o substituire de istoric, in afara cazurilor cind este urmat de blank, rind nou, = sau (.
!!
Se refera la comanda precedenta. Este sinonim cu `!-1'.
!n
Se refera la linia de comanda n.
!-n
Se refera la linia de comanda curenta minus n.
!string
Se refera la cea mai recenta comanda care incepe cu `string'.
!?string[?]
Se refera la cea mai recenta comanda care contine sirul dat.
^string1^string2^
Substituire rapida. Repeta ultima comanda, inlocuind string1 cu string2. Echivalenta cu ``!!:s/string1/string2/'' (vezi si Modificatori, mai jos).
!#
Intreaga linie de comanda introdusa pina aici.

Semnificatori de Cuvinte

Un caracter `:' desparte specificatia evenimentului de semnificatorul de cuvint. El poate fi omis daca semnificatorul de cuvint incepe cu ^, $, * sau %. Cuvintele sunt numarate de la inceputul rindului, primul cuvint fiind notat cu 0 (zero).
0
Cuvintul numarul zero. Pentru shell, acesta este cuvintul de comanda.
n
Al n-lea cuvint.
^
Primul argument, identic cu cuvintul nr.1.
$
Ultimul argument.
%
Cuvintul gasit la cea mai recenta cautare a sirului `?string?'
x-y
Un domeniu de cuvinte. `-y' abreviaza domeniul `0-y'.
*
Toate cuvintele, in afara de cuvintul 0. Este sinonim cu 1-$. Nu e gresit a se folosi * daca in eveniment exista un singur cuvint; in acest caz este returnat sirul vid.
x*
Abreviaza domeniul x-$.
x-
Abreviaza domeniul x-$ ca si x*, dar omite ultimul cuvint.

Modificatori

Dupa semnificatorul de cuvint optional, poti adauga o secventa de unul sau mai multi modificatori, fiecare fiind precedat de `:'.
h
Sterge componentele unui nume de cale, pastrind doar partea de inceput.
r
Sterge un sufix de forma .xxx, lasind doar numele de baza.
e
Sterge tot in afara sufixului.
t
Sterge toate componentele de la inceputul unui nume de cale, pastrind doar partea ei finala.
p
Afiseaza noua comanda dar nu o executa.
q
Citeaza cuvintele substituite, prevenind substituirea lor ulterioara.
x
Citeaza cuvintele substituite, ca si la `q', dar desparte in cuvinte la spatii si caractere `rind nou'.
s/old/new/
Substituie pe `new' in locul primei aparitii a lui `old' in rindul-eveniment. In loc de / poate fi folosit orice delimitator. Delimitatorul final este optional daca este ultimul caracter al liniei-eveniment. Delimitatorul poate fi citat in `old' si `new' cu un backslash (\). Daca in `new' apare &, el va fi inlocuit cu `old'. Un backslash va cita caracterul &.
&
Repeta substitutia precedenta.
g
Face ca modificarile sa fie aplicate asupra intregii linii a evenimentului. Acest modificator se foloseste impreuna cu modificatorul `:s' (de exemplu `:gs/old/new/') ori cu `:&'. Daca e folosit cu `:s', atunci in locul lui / poate fi folosit orice delimitator, si delimitatorul final este optional daca este ultimul caracter al liniei-eveniment.

| 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 |

EVALUAREA ARITMETICA

Shell-ul permite evaluarea expresiilor aritmetice, in anumite conditii (vezi comanda interna "let" si Expandarea Aritmetica). Evaluarea se face in intregi lungi, fara verificarea depasirii, desi impartirea prin zero este sesizata si semnalata ca eroare. Urmatorii operatori sunt grupati pe nivele de prioritate egala. Nivelele sunt listate in ordinea descrescatoare a prioritatii.
- +
minus si plus unar
! ~
negatie logica si la nivel de bit
* / %
inmultire, impartire, rest
+ -
adunare, scadere
<< >>
deplasare bit cu bit, la stinga si la dreapta
<= >= < >
comparatie
== !=
egalitate si inegalitate
&
AND (SI) bit cu bit
^
XOR (SAU EXCLUSIV) bit cu bit
|
OR (SAU) bit cu bit
&&
AND (SI) logic
||
OR (SAU) logic
= *= /= %= += -= <<= >>= &= ^= |=
atribuire
Variabilele de shell sunt acceptate ca operanzi; inainte de evaluarea expresiei se realizeaza expandarea parametrilor. Valoarea unui parametru din cadrul unei expresii este convertita la un intreg lung. O variabila de shell nu trebuie sa aiba activat atributul integer ca sa poata fi folosita intr-o expresie.

Constantele cu 0 la inceput sunt interpretate ca numere octale. Un 0x sau 0X denota un numar hexazecimal. Altfel, numerele iau forma [baza#]n, unde `baza' este un numar zecimal intre 2 si 36, reprezentind baza aritmetica, iar n este un numar scris in acea baza. Daca `baza' lipseste, atunci se foloseste baza 10.

Operatorii sunt evaluati in ordinea prioritatii. Subexpresiile dintre paranteze sunt evaluate primele, si pot incalca regulile de prioritate descrise mai sus.


| 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 |

COMENZILE INTERNE ALE SHELL-ULUI

: [argumente]
Fara efect; aceasta comanda nu face altceva decit expandeaza argumentele si realizeaza redirectionarile specificate. Este intors un cod de iesire zero.
.  fisier [argumente]
source fisier [argumente]
Citeste si executa comenzi din "fisier" in mediul de shell curent, si intoarce starea de iesire a ultimei comenzi executate din "fisier". Daca "fisier" nu contine un slash, atunci sunt folosite numele de cale din PATH pentru a gasi directorul care contine fisierul. Fisierele cautate pe caile din PATH nu trebuie sa fie executabile. Daca "fisier" nu este gasit in PATH, atunci se cauta in directorul curent. Daca se specifica argumente, ele devin parametri pozitionali la executia fisierului. Altfel, parametrii pozitionali ramin nemodificati. Starea de iesire este starea ultimei comenzi executate din script (0 daca nu se executa nici o comanda), si este "false" daca nu este gasit fisierul.
alias [nume[=valoare] ...]
Comanda "alias" fara argumente afiseaza la iesirea standard lista de alias-uri in forma "nume=valoare". Cind sunt date si argumente, se defineste un alias pentru fiecare nume caruia i se da o valoare. Un spatiu in cuprinsul sirului "valoare" face ca urmatorul cuvint sa fie verificat daca nu contine alias-uri, pentru a-l substitui la expandarea alias-ului. Pentru fiecare nume din lista de argumente, pentru care nu se specifica o valoare, numele si valoarea alias-ului sunt afisate. Alias-ul intoarce valoarea "true", in afara de cazul cind se da un nume pentru care nu s-a definit nici un alias.
bg [jobspec]
Trece in background jobul desemnat prin "jobspec", ca si cind acesta ar fi fost lansat folosind simbolul &. Daca "jobspec" nu este prezent, este folosit job-ul curent. Comanda intoarce 0 in afara cazului cind este suspendat controlul joburilor, sau (cu controlul joburilor activat) daca "jobspec" a fost lansat fara controlul joburilor sau nu este gasit.
bind [-m keymap] [-lvd] [-q nume]
bind [-m keymap] -f fisier
bind [-m keymap] keyseq:nume-functie
Afiseaza asignarile curente de taste si functii pentru biblioteca readline, sau asociaza o secventa de taste cu o functie sau macroinstructiune din readline. Sintaxa acceptata este identica cu cea din fisierul .inputrc, dar fiecare asociere trebuie specificata cu un argument distinct, de ex.: '"\C-x\C-r":re-read-init-file'. Optiunile, daca sunt date, au urmatoarele semnificatii:
-m keymap
Foloseste "keymap" ca harta de taste ce va fi afectata de asignarile ce ii urmeaza. Nume acceptabile pentru "keymap" sunt: emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, si vi-insert. vi este echivalent cu vi-command; emacs este echivalent cu emacs-standard.
-l
Listeaza numele tuturor functiilor readline.
-v
Listeaza numele functiilor si asignarile curente.
-d
Afiseaza numele de functii si asignarile in asa fel incit sa poata fi recitite.
-f fisier
Citeste asignarile de taste din fisier.
-q functie
Chestioneaza in legatura cu tastele invocate de functia respectiva.
Valoarea returnata este 0, in afara de cazul cind este data o optiune nerecunoscuta, sau cind survine o eroare.
break [n]
Iese dintr-o bucla for, until sau while. Daca n este specificat, intrerupe n niveluri ale buclei. n trebuie sa fie cel putin 1. Daca n este mai mare decit numarul de bucle incluse, atunci se iese din toate buclele incluse. Valoarea returnata este 0, in afara de cazul ca shell-ul executa o bucla cind are loc intreruperea.
builtin comanda-interna [argumente]
Executa comanda interna specificata, tercindu-i argumentele, si intoarce starea ei de iesire. Este utila cind vrei sa definesti o functie al carei nume este identic cu cel al unei comenzi interne de shell, dar in cadrul acestei functii trebuie sa folosesti si comanda interna originala. Comanda interna "cd" este redefinita, de obicei, in acest fel. Starea la iesire este "false" daca comanda interna specificata nu este o comanda interna de shell.
cd [dir]
Schimba directorul curent cu dir. Variabila HOME contine valoarea implicita a lui dir. Variabila CDPATH defineste calea de cautare a directorului care contine directorul dir. Numele alternative de directoare sunt despartite prin ":". Un nume nul de director in CDPATH este similar cu directorul curent, specificat prin ".". Daca dir incepe cu un slash (/), atunci nu se foloseste CDPATH. Un argument "-" este echivalent cu $OLDPWD. Valoarea returnata este "true" daca directorul a fost schimbat cu succes, altfel este "false".
command [-pVv] comanda [argument ...]
Executa comanda cu argumentele date, suprimind cautarea normala a functiilor de shell. Sunt executate numai comenzile interne si cele gasite in calea data de PATH. Daca este data optiunea -p, cautarea comenzii se face folosind o valoare implicita pentru PATH, care asigura gasirea utilitarelor standard. Daca se da optiunea -v, este afisata o descriere a comenzii. Optiunea -v produce un singur cuvint care reprezinta comanda sau calea folosita pentru a apela afisarea comenzii; optiunea -V produce o descriere mai detaliata. Un argument -- dezactiveaza verificarea optiunilor la restul argumentelor. Daca se da optiunea -V sau -v, starea de iesire este 0 daca este gasita comanda, altfel este 1. Daca nu se da nici una din aceste optiuni si apare o eroare sau nu e gasita comanda, atunci starea de iesire este 127. Altfel, starea de iesire este starea de iesire a comenzii.
continue [n]
Reia executia cu urmatoarea iteratie a buclei for, while sau until in care este inclusa. Daca n este specificat, reia de la bucla numarul n, unde n trebuie sa fie >= 1. Daca n este mai mare decit numarul de cicluri, este reluata executia cu ultimaul ciclu din bucla (cel final). Valoarea returnata este 0 in afara de cazul cind shell-ul nu executa nici o bucla in momentul executiei comenzii "continue".
declare [-frxi] [nume[=valoare]]
typeset [-frxi] [nume[=valoare]]
Declara variabile si/sau le da atribute. Daca nu se dau nume, atunci se afiseaza valorile variabilelor. Optiunile pot fi folosite pentru a restringe iesirea la variabilele care au atributul specificat.
-f
Foloseste numai numele de functii.
-r
Face numele "readonly". Aceste nume nu vor mai putea primi valori prin instructiuni de atribuire ulterioare.
-x
Marcheaza numele pentru export catre comenzile care vor urma, prin intermediul mediului de operare.
-i
Variabila este tratata ca numar intreg; cind variabilei i se atribuie o valoare, se face evaluarea aritmetica (vezi EVALUAREA ARITMETICA).
Folosirea lui `+' in loc de `-' dezactiveaza atributul. Cind se foloseste intr-o functie, face numele sa fie local, ca si comanda "local". Valoarea returnata este 0, in afara de cazul cind se intilneste o optiune ilegala, cind se incearca sa se defineasca o functie folosind "-f foo=bar", unul dintre nume nu este un nume valid de variabila de shell, cind se incearca dezactivarea starii "readonly" pentru o variabila "readonly", sau cind se incearca afisarea unei functii inexistente cu -f.
dirs [-l] [+/-n]
Afiseaza lista directoarelor memorate in mod curent. Directoarele sunt adaugate la lista prin comanda "pushd". Comanda "popd" executa deplasarea inapoi prin lista.
+n
afiseaza intrarea n numarata de la stinga listei afisate de comanda "dirs" invocata fara optiuni; numaratoarea incepe de la zero.
-n
afiseaza intrarea n numarata de la dreapta listei afisate de comanda "dirs" invocata fara optiuni; numaratoarea incepe de la zero.
-l
produce o listare mai lunga; formatul implicit pentru listare foloseste tilda pentru a desemna directorul de domiciliu (home-directory).
Valoarea returnata este 0, in afara de cazul cind este furnizata o optiune ilegala sau cind n depaseste capatul stivei de directoare.
echo [-neE] [arg ...]
Scrie la iesire argumentele (arg), separate prin spatii. Starea returnata este intotdeauna 0. Daca se specifica -n, va fi suprimat codul din finalul sirului. Daca se da optiunea -e, este activata interpretarea caracterelor din continuare care sunt marcate prin backslash (\). Optiunea -E dezactiveaza interpretarea acestor caractere-escape, chiar si pe sisteme unde ele sunt interpretate in mod implicit.
\a
alarma (beep)
\b
backspace [sterge indarat]
\c
suprima caracterul de la sfirsit
\f
form feed [pagina noua]
\n
new line [rind nou]
\r
carriage return
\t
tab orizontal
\v
tab vertical
\\
backslash
\nnn
caracterul care are codul ASCII (in octal) nnn.

enable [-n] [-all] [nume ...]
Activeaza si dezactiveaza comenzile interne de shell. Aceasta permite executia unei comenzi de pe disc, care are acelasi nume ca si o comanda interna de shell, fara specificarea unei cai complete de cautare. Daca se foloseste -n, fiecare "nume" este dezactivat; altfel, sunt activate comenzile desemnate de "nume". De exemplu, pentru a folosi comanda "test" gasita prin calea din PATH in loc de versiunea ei interna, se scrie:
		 enable -n test
Daca nu se dau argumente, este afisata o lista a tuturor comenzilor de shell active. Daca se da doar -n, se afiseaza o lista a tuturor comenzilor interne dezactivate. Daca se da doar -all, lista afisata include toate comenzile interne, cu o indicare a starii lor de activare sau dezactivare. Se accepta -a ca sinonim pentru -all. Valoarea returnata este 0, in afara de cazul cind un "nume" nu reprezinta o comanda interna de shell.
eval [arg ...]
Argumentele (arg) sunt citite si concatenate impreuna intr-o singura comanda. Aceasta comanda este apoi citita si executata de shell, si starea ei de iesire este returnata ca valoare a comenzii "eval". Daca nu exista argumente, sau exista numai argumente nule, "eval" intoarce valoarea "true".
exec [[-] comanda [argumente]]
Daca este specificata "comanda", ea inlocuieste shellul. Nu se creeaza nici un proces nou. Argumentele devin argumentele comenzii. Daca primul argument este -, shell-ul plaseaza o cratima in argumentul nr. zero care este trecut comenzii. Este ceea ce face login-ul. Daca fisierul nu poate fi executat dintr-un motiv oarecare, un shell neinteractiv iese din executie, in afara cazului cind exista variabila de shell no_exit_on_failed_exec , caz in care returneaza esecul. Daca nu este specificata comanda, orice redirectionari au efect in shell-ul curent, si starea de iesire este 0.
exit [n]
Face ca shell-ul sa iasa din executie cu starea de iesire n. Daca n este omis, starea de iesire este cea a ultimei comenzi executate. O captare a variabilei EXIT este executata inainte de terminarea shell-ului.
export [-nf] [nume[=cuvint]] ...
export -p
"Numele" furnizate sunt marcate pentru export automatic catre mediul comenzilor executate ulterior. Daca se da optiunea -f, "nume" se refera la functii. Daca nu se dau nume, sau daca se da optiunea -p, este afisata o lista a tuturor "nume"-lor care sunt exportate in acest shell. Optiunea -n face ca atributul de exportare sa fie sters din variabilele numite. Un argument -- dezactiveaza verificarea optiunilor pentru restul argumentelor. Comanda "export" returneaza o stare de iesire 0, in afara de cazul cind este intilnita o optiune ilegala, cind unul dintre "nume" nu este un nume legal de variabila de shell, sau cind se da optiunea -f cu un "nume" care nu este de functie.
fc [-e enume] [-nlr] [prima] [ultima]
fc -s [model=subs] [cmd]
Comanda Fix. In prima forma se selecteaza un sir de comenzi, de la "prima" la "ultima", din lista-istoric. "Prima" si "ultima" pot fi specificate ca un sir de caractere (pentru a localiza cea mai recenta comanda care incepe cu acel sir) sau ca un numar (un index al listei-istoric, unde se foloseste un numar negativ ca diferenta fata de numarul comenzii curente). Daca "ultima" nu se specifica, ea va fi setata pentru listare la comanda curenta (astfel incit "fc -l -10" afiseaza ultimele 10 comenzi), iar pentru altceva, va fi setata la "prima". Daca lipseste "prima", ea este setata la comanda precedenta, pentru editare, si la -16 pentru listare.

Flagul -n suprima numerele comenzilor la listare. Flagul -r inverseaza ordinea comenzilor. Daca este dat flagul -l, atunci comenzile sunt listate la iesirea standard. Altfel, editorul dat prin "enume" este invocat ca sa lucreze pe un fisier care contine aceste comenzi. Daca "enume" lipseste, se foloseste valoarea variabilei FCEDIT, sau valoarea variabilei EDITOR daca FCEDIT nu este setata. Daca nici una dintre variabile nu este setata, se foloseste editorul vi. Cind editarea a fost incheiata, comenzile editate sunt afisate si executate.

In a doua forma, comanda este re-executata de fiecare data cind "model" este inlocuit cu "subs". Un alias util pentru asa ceva este "r=fc -s", astfel incit comanda "r cc" executa cea mai recenta comanda care incepe cu "cc", iar comanda "r" re-executa ultima comanda.

Daca se foloseste prima forma, valoarea returnata este 0 in afara de cazul cind se intilneste o optiune ilegala sau cind "prima" sau "ultima" desemneaza rinduri din istoric care ies din numarul liniilor existente. Daca se da optiunea -e, valoarea returnata este valoarea ultimei comenzi executate, sau un cod de esec daca s-a produs vreo eroare cu fisierul temporar de comenzi. Daca se utilizeaza a doua forma, starea de iesire este cea a ultimei comenzi re-executate, in afara de cazul cind "cmd" nu specifica un numar valid de linie din istoric, cind se returneaza esec.


fg [jobspec]
Plaseaza jobul specificat (jobspec) in foreground, si il face job curent. Daca "jobspec" lipseste, se foloseste notiunea de job curent a shell-ului. Valoarea returnata este cea a comenzii plasate in foreground, sau cod de esec daca "fg" se executa cind este dezactivat controlul joburilor, iar cind era activat controlul joburilor, daca "jobspec" nu desemneaza un job valid sau desemneaza un job care fusese lansat fara controlul joburilor.
getopts optstring nume [args]
Comanda "getopts" este folosita de procedurile de shell pentru a scana parametrii pozitionali. Sirul "optstring" contine literele optiunilor care trebuie sa fie recunoscute; daca o litera este urmata de : atunci este de asteptat ca optiunea sa aiba un argument, care ar putea fi separat de aceasta prin spatiu. La fiecare invocare, "getopts" plaseaza urmatoarea optiune in variabila "nume" a shell-ului, initializind "nume" daca nu exista, iar indexul urmatorului argument de procesat il plaseaza in variabila OPTIND. OPTIND este initializat cu valoarea 1 de fiecare data cind este invocat un shell sau un script de shell. Cind o optiune necesita un argument,"getopts" plaseaza acel argument in variabila OPTARG. Shell-ul nu reseteaza automat variabila OPTIND; ea trebuie resetata manual intre apelurile multiple ale comenzii "getopts" din cadrul aceleiasi invocari a shell-ului, daca trebuie folosit un nou set de parametri.

Comanda "getopts" raporteaza erorile in doua feluri. Daca primul caracter din optstring este :, se foloseste raportarea silentioasa a erorilor. In operarea normala, mesajele de diagnostic sunt afisate cind sunt intilnite optiuni ilegale sau absenta argumentelor optiunii. Daca variabila OPTERR este setata la 0, nu vor fi afisate mesaje de eroare, chiar si daca primul caracter din optstring nu este :.

Daca este gasita o optiune ilegala, "getopts" plaseaza un ? in "nume" si, daca nu e activa raportarea silentioasa a erorii, afiseaza un mesaj de eroare si deseteaza variabila OPTARG. Daca "getopts" este silentios, caracterul gasit ca optiune e plasat in OPTARG si nu se afiseaza mesaj de diagnostic.

Daca un argument necesar nu este gasit, si "getopts" nu este silentios, un semn de intrebare (?) este plasat in "nume", OPTARG este desetata, si se afiseaza un mesaj de diagnostic. Daca "getopts" este silentios, atunci simbolul doua-puncte (:) este plasat in "nume", iar OPTARG este setata la caracterul gasit ca optiune.

Comanda "getopts" scaneaza, de regula, parametrii pozitionali, dar daca in "args" se dau mai multe argumente, atunci ii va scana pe acestia in loc. Comanda intoarce valoarea "true" daca o optiune, specificata sau nespecificata, este gasita. Ea returneaza "false" daca se intilneste sfirsitul optiunilor sau daca survine o eroare.


hash [-r] [nume]
Pentru fiecare "nume", se determina si se memoreaza calea completa de cautare a comenzii. Optiunea -r face ca bash-ul sa uite toate locatiile memorate deja. Daca nu se dau argumente, se afiseaza informatii despre comenzile memorate. Un argument -- dezactiveaza verificarea optiunilor pentru argumentele ramase dupa --. Starea returnata este "true" in afara de cazul cind un "nume" nu este gasit sau cind este furnizata o optiune ilegala.
help [model]
Afiseaza informatii utile despre comenzile interne. Daca "model" este specificat, comanda "help" ofera informatii in detaliu despre toate comenzile care corespund modelului; altfel, este afisata o lista a comenzilor interne de shell. Starea de iesire este 0 in afara de cazul cind nici o comanda nu corespunde modelului dat.
history [n]
history -rwan [fisier]
Fara optiuni, afiseaza lista-istoric de comenzi, cu rindurile numerotate. Rindurile listate cu * au fost modificate. Un argument n determina listarea doar a ultimelor n rinduri. Daca se da un argument care nu este o optiune, el va fi folosit ca nume al fisierului-istoric; daca nu, se foloseste valoarea variabilei HISTFILE. Optiunile, daca sunt date, au urmatoarea semnificatie:
-a
Adauga "noile" rinduri de istoric (introduse de la inceputul sesiunii de bash curente) la fisierul-istoric.
-n
Citeste rindurile de istoric care inca nu au fost citite, din fisierul-istoric in lista-istoric curenta. Acestea sunt rindurile adaugate la fisierul-istoric de la inceputul sesiunii curente de bash.
-r
Citeste continutul fisierului-istoric si il foloseste ca istoric curent.
-w
Scrie istoricul curent in fisierul-istoric, inlocuind continutul fisierului-istoric.
Valoarea returnata este 0, in afara de cazul cind este intilnita o optiune ilegala sau cind apare o eroare la citirea sau scrierea fisierului-istoric.
jobs [-lnp] [ jobspec ... ]
jobs -x comanda [ args ... ]
Prima forma listeaza joburile active. Optiunea -l afiseaza si PID-uri (identificatori de proces) pe linga informatiile normale; optiunea -p listeaza numai PID-ul pentru liderul grupului de procese. Optiunea -n afiseaza numai joburile care si-au schimbat starea de la ultima schimbare anuntata. Daca se da "jobspec", iesirea este limitata la informatiile despre jobul respectiv. Starea de iesire este 0 daca nu se intilneste o optiune ilegala si daca nu se da un "jobspec" ilegal.

Daca se da optiunea -x, comanda "jobs" inlocuieste orice "jobspec" gasit in "comanda" sau "args" cu PID-ul care ii corespunde, si executa "comanda" trecindu-i argumentele "args" si returnind starea ei de iesire.


kill [-s sigspec | -sigspec] [pid | jobspec] ... kill -l [signum] Trimite semnalul numit de "sigspec" catre procesele desemnate prin PID sau "jobspec"; "sigspec" este fie un nume de semnal, ca SIGKILL, fie un numar de semnal. Daca "sigspec" este un nume de semnal, el poate fi dat cu sau fara prefixul SIG, si nu conteaza daca e scris cu litere mari sau mici. Daca nu este prezent "sigspec", atunci se foloseste implicit SIGTERM. Un argument -l listeaza numele semnalelor. Daca se dau si alte argumente cind se da -l, atunci sunt listate numele semnalelor specificate, iar starea de iesire este 0. Un argument -- va dezactiva verificarea optiunilor din argumentele ramase dupa el. Comanda "kill" intoarce starea "true" daca a fost trimis cu succes cel putin un semnal, sau "false" daca survine o eroare sau daca este intilnita o optiune ilegala.
let arg [arg ...]
Fiecare "arg" este o expresie aritmetica, ce trebuie evaluata (vezi EVALUAREA ARITMETICA). Daca ultimul "arg" este evaluat ca fiind 0, comanda "let" intoarce 1 la iesire; altfel, intoarce 0.
local [nume[=valoare] ...]
Pentru fiecare argument, creeaza o variabila locala denumita "nume", si ii atribuie valoarea "valoare". Cind comanda "local" este folosita in interiorul unei functii, ea determina limitarea vizibilitatii acestei variabile la functia aceasta si la copiii ei. Fara operanzi, comanda "local" afiseaza la iesirea standard o lista a variabilelor locale. Este o eroare daca se foloseste "local" in afara unei functii. Starea de iesire este 0, in afara de cazul cind comanda "local" este folosita in afara unei functii, sau cind se da un nume ilegal.
logout
Iese din shell-ul de login.
popd [+/-n]
Sterge intrari din stiva de directoare. Fara argumente, sterge din stiva directorul aflat in virf, si executa "cd" in noul director aflat in virful stivei.
+n
sterge intrare numarul n, numarata din stinga in lista afisata de comanda "dirs", incepind cu zero. De exemplu: "popd +0" sterge primul director, iar "popd +1" sterge al doilea director.
-n
sterge intrarea numarul n, numarata din dreapta in lista afisata de "dirs", incepind cu numarul zero. De exemplu: "popd -0" sterge ultimul director, iar "popd -1" sterge penultimul director.
Daca "popd" este executata cu succes, se executa si o comanda "dirs", si starea de iesire este 0. Comanda "popd" intoarce "false" daca este intilnita o optiune ilegala, daca stiva de directoare este goala, daca se specifica o intrare care nu exista in stiva de directoare, sau daca schimbarea de director ("cd") esueaza.
pushd [dir]
pushd +/-n
Adauga un director in virful stivei de directoare, sau roteste stiva, facind din noul virf al stivei directorul curent de lucru. Fara argumente, schimba intre ele cele doua directoare din virful stivei si intoarce 0, in afara de cazul cind stiva este goala.
+n
Roteste stiva astfel incit directorul numarul n (numarat de la stinga listei afisate de comanda "dirs") sa fie in virf.
-n
Roteste stiva astfel incit directorul numarul n (numarat de la draota listei afisate de comanda "dirs") sa fie in virf.
dir
adauga directorul "dir" in virful stivei de directare, facind din el director de lucru curent.
Daca executia comenzii "pushd" se incheie cu succes, atunci se executa si o comanda "dirs". Daca se foloseste prima forma, "pushd" intoarce starea 0 in afara de cazul cind esueaza schimbarea directorului curent in "dir". Cu a doua forma, se intoarce 0 numai in afara de cazul ca stive de directoare este goala, este specificat un element non-existent al stivei de directoare, sau esueaza schimbarea directorului in directorul curent nou specificat.
pwd
Afiseaza calea absoluta catre directorul de lucru curent. Calea afisata nu contine link-uri simbolice daca optiunea -P a comenzii interne "set" este setata. Vezi si descrierea variabilei "nolinks" mai sus, la Variabile de Shell). Starea returnata este 0 in afara de cazul cind survine o eroare in timpul citirii caii de acces catre directorul curent.
read [-r] [nume ...]
Se citeste un rind de la intrarea standard, si primul cuvint este asociat cu primul "nume", al doilea cuvint cu al doilea "nume" , s.a.m.d., cuvintele ramase fiind asociate ultimelor "nume". Numai caracterele din IFS sunt recunoscute ca avind rolul de delimitatori de cuvinte. Daca nu sunt date "nume", rindul citit este atribuit ca valoare variabilei REPLY. Codul returnat este 0, in afara de cazul ca este intilnit caracterul end-of-file (sfirsit de fisier). Daca este data optiunea -r, o pereche backslash-newline nu este ignorata, si backslash-ul este considerat ca facind parte din rind.
readonly [-f] [nume ...]
readonly -p
"Numele" date sunt marcate ca "readonly" (pot fi doar citite) si valorile acestor "nume" nu pot fi schimbate prin atribuiri care ar putea surveni ulterior. Daca se da optiunea -f, sunt marcate astfel functiile ce corespund aceslor "nume". Daca nu se dau argumente, sau daca apare optiunea -p, se afiseaza o lista a tuturor "numelor" marcate ca "readonly". Un argument -- dezactiveaza verificarea optiunilor pentru restul argumentelor. Starea returnata este 0, in afara de cazul cind se intilneste o optiune ilegala, cind unul dintre "nume" nu e un nume legal de variabila de shell, sau daca optiunea -f se da cu un "nume" care nu reprezinta o functie.
return [n]
Determina o functie sa iasa din executie cu valoarea de iesire specificata prin n. Daca n este omis, starea returnata este cea a ultimei comenzi executate din corpul functiei. Daca se foloseste "return" in afara unei functii, dar in timpul executiei unui script prin comanda "." (sursa), aceasta face ca shell-ul sa opreasca executia scriptului si sa returneze fie valoarea n, fie starea de iesire a ultimei comenzi executate din script, ca stare de iesire a scriptului. Daca se foloseste "return" in afara unei functii si nu in timul executiei unui script prin comanda ".", starea returnata este "false".
set [--abefhkmnptuvxldCHP] [-o optiune] [arg ...]
-a
Marcheaza automat variabilele care sunt create sau modificate pentru a fi exportate catre mediul comenzilor urmatoare.
-b
Determina raportarea imediata a starii joburilor care se incheie in background, in loc sa fie raportate inaintea primei afisari a promptului principal (Vezi si "notify" mai sus, la Variabile de Shell).
-e
Determina iesirea imediata din shell (ca la "exit") daca o comanda simpla (vezi GRAMATICA SHELL-ului, mai sus) se incheie cu o stare diferita de zero. Shell-ul nu iese din executie in cazul in care comanda esuata face parte dintr-o bucla "while" sau "until", dintr-o instructiune "if", dintr-o lista cu && sau ||, sau daca valoarea returnata de comanda este inversata prin simbolul !.
-f
Dezactiveaza expandarea numelui caii de acces.
-h
Localizeaza si retine comenzile din functii odata cu definirea functiilor. De regula, comenzile din functii sunt verificate atunci cind functia este executata.
-k
Toate argumentele tip cuvint-cheie sunt plasate in mediu pentru o comanda, si nu numai acelea care preced numele comenzii.
-m
Modul monitor. Este activat controlul joburilor. Acest flag este activ in mod implicit pentru shell-urile interactive pe sistemele care suporta acest lucru (vezi mai sus CONTROLUL JOBURILOR). Procesele din fundal se executa intr-un grup separat de procese, si la incheierea lor este afisat un rind ce contine starea lor de iesire.
-n
Citeste comenzile dar nu le executa. Aceasta poate fi folosita pentru a verifica daca un script de shell are erori de sintaxa. Este ignorat in shell interactiv.
-o nume-de-optiune
Numele de optiune poate fi unul dintre urmatoarele:
allexport
Ca si -a.
braceexpand
Shell-ul executa expandarea de paranteze (vezi mai sus Expandarea Parantezelor). Aceasta este optiunea implicit activa.
emacs
Foloseste o interfata stil "emacs" pentru editarea liniei de comanda. Este optiunea in mod implicit activa cind shell-ul este interactiv, in afara de cazul cind shell-ul e lansat cu optiunea -nolineediting.
errexit
Ca si -e.
histexpand
Ca si -H.
ignoreeof
Efectul ca si cind s-ar fi executat comanda de shell `IGNOREEOF=10' (vezi mai sus Variabile de Shell).
interactive-comments
Permite ca un cuvint care incepe cu # sa faca astfel incit acel cuvint si toate caracterele ramase pe rindul respectiv sa fie ignorate intr-un shell interactiv. (vezi COMENTARII).
monitor
Ca si -m.
noclobber
Ca si -C.
noexec
Ca si -n.
noglob
Ca si -f.
nohash
Ca si -d.
notify
Ca si -b.
nounset
Ca si -u.
physical
Ca si -P.
posix
Schimba comportarea bash-ului astfel incit sa se conformeze standardului Posix 1003.2, acolo unde operatia implicita difera de standard.
privileged
Ca si -p.
verbose
Ca si -v.
vi
Foloseste o interfata stil "vi" la editarea liniei de comanda.
xtrace
Ca si -x.
Daca nu se da nici un nume de optiune, se afiseaza valorile optiunilor curente.
-p
Trece in modul privilegiat. In acest mod, fisierul desemnat de variabila $ENV nu este procesat, si nu se mostenesc functiile de shell din mediu. Acest mod este activat automat la intrarea in shell daca UID-ul sau GID-ul efectiv nu este acelasi cu UID-ul, respectiv GID-ul real. Dezactivarea acestei optiuni face ca UID-ul si GID-ul efectiv sa fie setate la valorile UID-ului si GID-ului real.
-t
Iese dupa ce citeste si executa o comanda.
-u
Trateaza variabilele nesetate ca erori atunci cind se executa expandarea parametrilor. Daca se incearca expandarea pe o variabila nesetata, shell-ul afiseaza un mesaj de eroare si, daca nu este interactiv, iese cu o stare diferita de zero.
-v
Afiseaza liniile de intrare ale shell-ului pe masura ce sunt citite.
-x
Dupa expandarea fiecarei comenzi simple, bash-ul afiseaza valoarea expandata a lui PS4, urmata de comanda si de argumentele ei expandate.
-l
Salveaza si restaureaza asignarile pentru "nume" din comanda "for nume [in cuvint]" (vezi GRAMATICA de SHELL mai sus).
-d
Dezactiveaza marcarea pentru comenzile care sunt verificate pentru executie. In mod normal, comenzile sunt memorate intr-o tabela de marcare, si odata ce sunt gasite, nu mai trebuie verificate din nou.
-C
Efectul este ca si cum ar fi fost executata comanda de shell "noclobber=" (vezi Variabilele de Shell).
-H
Activeaza substituirea de istoric in stil !. Acest flag este activ in mod implicit atunci cind shell-ul este interactiv.
-P
Daca este setat, nu se urmaresc legaturile simbolice atunci cind se executa comenzi ca "cd", care schimba directorul curent. In locul acestora se foloseste directorul fizic.
--
Daca dupa acest flag nu urmeaza argumente, atunci parametrii pozitionali sunt desetati. Altfel, parametrii pozitionali sunt setati la argumente, chiar si daca unii dintre ei incep cu un -.
-
Semnaleaza sfirsitul optiunilor, facind ca toate argumentele ramase sa fie atribuite parametrilor pozitionali. Optiunile -x si -v sunt dezactivate. Daca nu exista argumente, parametrii pozitionali ramin neschimbati.
Flag-urile sunt inactive in mod implicit, in afara de cazul cind sunt altfel specificate. Folosirea lui + in loc de - face ca flagurile sa fie dezactivate. Flag-urile mai pot fi specificate si ca optiuni la invocarea shell-ului. Setul curent de flaguri poate fi gasit in $-. Dupa procesarea argumentelor-optiuni, cele n argumente ramase sunt tratate ca valori pentru parametrii pozitionali si sunt atribuiti, in ordine, parametrilor $1, $2, ..., $n. Daca nu se furnizeaza nici un fel de optiuni sau argumente, sunt afisate toate variabilele de shell. Starea de iesire este intotdeauna "true" in afara de cazul cind este intilnita o optiune ilegala.
shift [n]
Parametrii pozitionali incepind cu n+1 sunt redenumiti ca $1, $2 etc. Parametrii reprezentati de numerele $# pina la $#-n+1 sunt desetati. Daca n este 0, nici un parametru nu se schimba. Daca n nu este dat, se presupune ca n este 1. Trebuie ca n sa fie un numar ne-negativ, mai mic sau egal cu $#. Daca n este mai mare decit $#, parametrii pozitionali nu sunt schimbati. Starea returnata este mai mare ca 0 daca n este mai mare decit $# sau daca n e mai mic decit 0; altfel, este 0.
suspend [-f]
Suspenda executia shell-ului curent pina cind primeste un semnal SIGCONT. Optiunea -f anuleaza orice reactie daca este vorba de un shell de login, deci il suspenda oricum. Starea de iesire este 0 in afara de cazul cind shell-ul este un shell de login si nu s-a dat optiunea -f, sau daca nu este activat controlul joburilor.
test expr
[ expr ]
Intoarce starea 0 ("true") sau 1 ("false") in functie de evaluarea expresiei conditionale "expr". Expresiile pot sa fie unare sau binare. Expresiile unare sunt adesea folosite pentru a examina starea unui "fisier". Exista si operatori pentru siruri de caractere, si operatori de comparare numerica. Fiecare operator si operand trebuie sa fie un argument separat. Daca "fisier" este de forma /dev/fd/n, atunci este verificat descriptorul de fisier n.
-b fisier
"True" daca "fisier" exista si este tip bloc special.
-c fisier
"True" daca "fisier" exista si e tip caracter special.
-d fisier
"True" daca "fisier" exista si este un director.
-e fisier
"True" daca "fisier" exista.
-f fisier
"True" daca "fisier" exista si e un fisier obisnuit.
-g fisier
"True" daca "fisier" exista si are setat bitul de "set-group-id".
-k fisier
"True" daca "fisier" are setat bitul "sticky".
-L fisier
"True" daca "fisier" exista si este un link simbolic.
-p fisier
"True" daca "fisier" exists si este un "pipe" denumit.
-r fisier
"True" daca "fisier" exista si poate fi citit.
-s fisier
"True" daca "fisier" exista si are lungimea mai mare ca zero.
-S fisier
"True" daca "fisier" exista si este un "socket".
-t fd
"True" daca fd este deschis pe un terminal.
-u fisier
"True" daca "fisier" exista si are setat bitul de "set-user-id".
-w fisier
"True" daca "fisier" exista si poate fi scris.
-x fisier
"True" daca "fisier" exista si este executabil.
-O fisier
"True" daca "fisier" exista si apartine de UID efectiv.
-G fisier
"True" daca "fisier" exista si apartine de GID efectiv.
fisie1 -nt fisier2
"True" daca "fisier1" e mai nou decit "fisier2" (dupa data ultimei modificari).
fisier1 -ot fisier2
"True" daca "fisier1" e mai vechi decit "fisier2".
fisier1 -ef fisier2
"True" daca "fisier1" si "fisier2" au acelasi numar de device si de inod.
-z string
"True" daca lungimea lui "string" este zero.
-n string
string
"True" daca lungimea lui "string" nu este zero.
string1 = string2
"True" daca sirurile sunt egale.
string1 != string2
"True" daca sirurile nu sunt egale.
! expr
"True" daca "expr" este "false".
expr1 -a expr2
"True" daca "expr1" SI "expr2" sunt simultan "true".
expr1 -o expr2
"True" daca "expr1" SAU "expr2" este "true".
arg1 OP arg2
"OP" este unul din operatorii:
-eq
(egal)
-ne
(diferit)
-lt
(mai mic)
-le
(mai mic sau egal)
-gt
(mai mare)
-ge
(mai mare sau egal)
Acesti operatori aritmetici binari intorc valoarea "true" daca relatia dintre "arg1" si "arg2" este cea verificata de fiecare dintre ei. Argumentele "arg1" si "arg2" pot fi intregi pozitivi, intregi negativi, sau expresia speciala "-l string", care evalueaza lungimea unui sir de caractere.

times
Afiseaza timpul acumulat de utilizator si de sistem pentru shell-ul curent si pentru procesele executate de shell. Starea returnata este 0.
trap [-l] [arg] [sigspec]
Argumentul "arg" al comenzii urmeaza sa fie citit si executat cind shell-ul primeste semnalul (sau semnalele) "sigspec". Daca "arg" este - sau lipseste, toate semnalele specificate sunt resetate la valorile lor originale (valorile pe care le aveau la intrarea in shell). Daca "arg" este sir nul, acest semnal este ignorat de shell si de comenzile invocate de el. Semnalul "sigspec" este fie un nume de semnal definit in , fie un numar de semnal. Daca "sigspec" este EXIT (0) atunci "arg" este executat la iesirea din shell. Fara argumente, comanda "trap" afiseaza lista comenzilor asociate cu fiecare numar de semnal. Optiunea -l determina shell-ul sa afiseze o lista cu numele de semnale si numerele care le corespund. Un argument -- dezactiveaza verificarea optiunilor pentru restul argumentelor. Semnalele ignorate la intrarea in shell nu pot fi captate sau resetate. Semnalele captate sunt resetate la valorile lor originale intr-un proces fiu atunci cind acesta este creat. Starea returnata este "false" daca numele sau numarul semnalului de captat nu este valid; altfel, comanda "trap" intoarce valoarea "true".
type [-all] [-type | -path] nume [nume ...]
Fara optiuni, indica modul in care va fi folosit fiecare "nume" daca este folosit ca nume de comanda. Daca se foloseste flagul -type, se afiseaza o fraza care poate fi una dintre urmatoarele: "alias" (alias), "keyword" (cuvint rezervat de shell), "function" (functie de shell), "builtin" (comanda interna a shell-ului), sau "file" (fisier pe disc), in functie de tipul lui "nume". Daca "nume" nu este gasit, atunci nu se afiseaza nimic si se intoarce o stare de iesire "false". Daca este folosit flagul -path, comanda "type" intoarce fie numele fisierului de pe disc care ar fi executat daca "nume" ar fi specificat ca nume de comanda, fie nimic daca flagul -type ar intoarce un tip diferit de "file". Daca o comanda este marcata (stil "hash"), -path afiseaza valoarea marcata, si nu neaparat fisierul care apare primul in calea data de PATH. Daca este folosit flagul -all, se afiseaza toate locurile care contin un "nume" executabil specificat. Aceasta include alias-uri si functii, daca si numai daca nu este folosit simultan si -path. Tabela comenzilor marcate (cu "hash") nu este consultata cind se foloseste -all. Comanda "type" accepta -a, -t si -p in loc de -all, -type si -path, respectiv. Un argument -- va dezactiva verificarea optiunilor pentru restul argumentelor. Comanda "type" intoarce "true" daca este gasit oricare dintre argumente, si "false" daca nu este gasit niciunul.
ulimit [-SHacdfmstpnuv [limita]]
Aceasta comanda permite operatorului sa aiba controlul asupra resurselor disponibile pentru shell si pentru procesele lansate de acesta, pe sistemele care permit acest control. Valoarea limitei poate fi un numar masurat in unitatea specificata pentru resursa, sau valoarea "unlimited". Optiunile H si S specifica faptul ca, pentru resursa data, este setata limita dura ("hard") sau blinda ("soft"). O limita dura nu poate fi largita odata ce a fost setata; o limita blinda poate fi marita pina la valoarea limitei dure. Daca nu se specifica nici optiunea H, nici S, comanda se aplica pentru limita blinda. Daca limita este omisa, se afiseaza valoarea curenta a limitei blinde pentru resursa, in afara de cazul ca se da optiunea H. Cind se specifica mai multe resurse, inaintea valorii sunt afisate numele limitei si unitatea. Alte optiuni sunt interpretatea stfel:
-a
sunt raportate toate limitele curente
-c
marimea maxima a fisierelor "core" create
-d
marimea maxima a segmentului de date pentru proces
-f
marimea maxima a fisierelor create de shell
-m
marimea maxima a setului rezident
-s
marimea maxima a stivei
-t
valoarea maxima a timpului CPU in secunde
-p
marimea unui pipe in blocuri de 512 bytes (poate sa nu fie setata)
-n
numarul maxim de descriptori pentru fisiere deschise (majoritatea sistemelor nu permit setarea acestei valori, ci doar afisarea ei)
-u
numarul maxim de procese disponibile pentru un singur utilizator
-v
Volumul maxim de memorie virtuala disponibil pentru shell.
Un argument -- dezactiveaza verificarea optiunilor pentru restul argumentelor. Daca se da limita, ea este noua valoare pentru resursa specificata (optiunea -a face doar afisarea). Daca nu se da nici o optiune, atunci se presupune ca este -f. Valorile sunt in incrementi de 1024 bytes, cu exceptia lui -t, pentru care valoarea este in secunde, -p care este masurata in blocuri de 512 bytes, si -n si -u, care sunt valori nescalate. Starea returnata este 0 in afara de cazul cind este intilnita o optiune ilegala, sau cind un argument ne-numeric, altul decit "unlimited", este dat ca limita, sau cind apare o eroare la setarea unei limite noi.
umask [-S] [mod]
Masca pentru crearea fisierelor utilizatorului este setata la valoarea data de "mod". Daca "mod" incepe cu o cifra, valoarea sa este interpretata ca un numar octal; altfel este interpretat ca masca de mod simbolic, similara cu cea acceptata de comanda "chmod(1)". Daca "mod" este omis, sau daca se da optiunea -S, valoarea curenta a mastii este afisata. Optiunea -S determina afisarea mastii in forma simbolica; iesirea implicita este un numar octal. Un argument -- dezactiveaza verificarea optiunilor pentru argumentele ramase. Starea returnata este 0 daca modul a fost schimbat cu succes sau daca nu s-a dat nici un argument "mod", altfel este "false".
unalias [-a] [nume ...]
Sterge numele din lista de alias-uri definite. Daca se da -a, toate definitiile de alias-uri sunt sterse. Valoarea returnata este "true" in afara de cazul cind un "nume" dat nu este un alias definit.
unset [-fv] [nume ...]
Pentru fiecare "nume", sterge (deseteaza) variabila respectiva sau, daca s-a dat optiunea -f, functia corespunzatoare. Un argument -- dezactiveaza verificarea optiunilor pentru restul de argumente. De retinut ca variabilele PATH, IFS, PPID, PS1, PS2, UID, si EUID nu pot fi desetate. Daca una din variabilele RANDOM, SECONDS, LINENO, ori HISTCMD este desetata, ea isi pierde proprietatile speciale, chiar si daca ulterior este resetata. Starea de iesire este "true" in afara de cazul cind un "nume" nu exista sau este al unei variabile care nu poate fi desetata.
wait [n]
Asteapta incheierea procesului specificat prin n si intoarce starea lui de iesire. Valoarea n poate fi un PID sau o specificatie de job; daca este un job, se asteapta incheierea tuturor proceselor din cadrul acelui job. Daca n nu este dat, se asteapta incheierea tuturor proceselor-fiu active in mod curent, si starea returnata este zero. Daca n specifica un proces sau job inexistent, starea returnata este 127. Altfel, starea returnata este starea de iesire a ultimului proces sau job a carui incheiere a fost asteptata.
| 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 |

INVOCAREA SHELL-ULUI

Un shell de login este un shell al carui argument zero incepe cu caracterul -, sau un shell lansat cu flagul -login.

Un shell interactiv este un shell pentru care intrarea si iesirea standard sunt conectate, amindoua, la terminale (determinate prin "isatty(3)") sau un shell lansat cu optiunea -i. PS1 este setat si $- include i daca bash-ul este interactiv, permitind ca un script de shell sau ca un fisier de pornire sa-i testeze starea.

  • Shell-uri de login:
    • La login (supus optiunii -noprofile):
      	    daca exista /etc/profile, il executa.
      	    
      	    daca exista ~/.bash_profile, il executa,
      	       altfel daca exista ~/.bash_login, il executa,
      		   altfel daca exista ~/.profile, il executa.
    • La iesire:
      	    daca exista ~/.bash_logout, il executa.
  • Shell-uri interactive non-login:
    • La pornire (supusa optiunilor -norc si -rcfile):
      	    daca exista ~/.bashrc, il executa.
  • Shell-uri neinteractive:
    • La pornire:
      	    daca variabila de mediu ENV este nenula, o expandeaza si executa 
      	    fisierul desemnat de ea, ca si cum s-ar executa comanda:
      		       if [ "$ENV" ]; then . $ENV; fi
      	    dar nu foloseste PATH ca sa caute numele caii de acces. Cind nu 
      	    este lansat in modul Posix, bash-ul cauta variabila BASH_ENV 
      	    inainte de a cauta ENV.
Daca Bash este invocat ca sh, el incearca sa mimeze cit mai fidel comportarea lui sh. Pentru un shell de login, el incearca sa execute numai /etc/profile si ~/.profile, in aceasta ordine. Optiunea -noprofile inca poate fi folosita pentru a dezactiva acest comportament. Un shell invocat ca sh nu incearca sa execute nici un alt fisier de pornire.

Cind bash-ul este lansat in modul Posix, ca atunci cind se da optiunea -posix in linia de comanda, el urmeaza standardul Posix pentru fisiere de pornire. In acest mod, variabila ENV este expandata si fisierul desemnat de ea este executat; nici un alt fisier de pornire nu mai este citit.


VEZI SI:

       Bash Features, Brian Fox and Chet Ramey
       The Gnu Readline Library, Brian Fox and Chet Ramey
       The Gnu History Library, Brian Fox and Chet Ramey
       A System V Compatible Implementation of 4.2BSD Job
	      Control, David Lennert
       Portable  Operating  System  Interface  (POSIX) Part 2:
	      Shell and Utilities, IEEE
       sh(1), ksh(1), csh(1)
       emacs(1), vi(1)
       readline(3)

FISIERE:

       /bin/bash
	      Executabilul bash.
       /etc/profile
	      Fisier de initializare pentru tot sistemul, executat pentru 
	      shell-uri de login.
       ~/.bash_profile
	      Fisier personal de initializare, executat pentru shell-uri de 
	      login.
       ~/.bashrc
	      Fisierul individual de pornire pentru shell-uri interactive 
	      non-login.
       ~/.inputrc
	      Fisierul individual de initializare pentru "readline".

AUTORI:

	      Brian   Fox,   Free  Software  Foundation  (autor principal)
	      bfox@ai.MIT.Edu

	      Chet Ramey, Case Western Reserve University
	      chet@ins.CWRU.Edu

RAPORTAREA ERORILOR

Daca descoperi o eroare de programare ("bug") in bash, este indicat sa o anunti. Dar mai intii ar trebui sa te asiguri ca este efectiv o eroare, si ca apare in ultima versiune de bash pe care o ai.

Odata ce ai stabilit ca eroarea exista cu adevarat, foloseste comanda "bashbug" ca sa trimiti un raport de eroare. Daca ai si o rezolvare pentru eroarea gasita, esti binevenit sa o trimiti si pe ea! Sugestiile si raportarile "filozofice" de erori pot fi trimise prin e-mail la bug-bash@prep.ai.MIT.Edu sau publicate in grupul de stiri gnu.bash.bug din Usenet.

TOATE rapoartele de eroare trebuie sa includa:

       Numarul versiunii de bash
       Hardware-ul si sistemul de operare
       Compilatorul folosit pentru compilare
       O descriere a comportarii erorii
       Un scurt script sau "reteta" care pune in evidenta eroarea.
Comanda "bashbug" insereaza automat primii trei itemi in macheta pe care o ofera pentru completarea unui raport de eroare.

Comentariile si raportarile de erori privind aceasta pagina de manual vor fi trimise la: chet@ins.CWRU.Edu.

ERORI:

Este prea mare si prea lent.

Exista citeva diferente subtile intre bash si versiunile traditionale de sh, majoritatea din cauza specificatiei POSIX.

Alias-urile provoaca unele confuzii in anumite cazuri.


| 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 |