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