Ash - comandă Linux - comandă Unix

NUME

sh - comandă interpret ( shell )

REZUMAT

sh [- / + aCefnuvxIimqsVEbc ] [- o nume lung ] -words [ țintă ... ]

DESCRIERE

Sh este interpreta standard de comandă pentru sistem. Versiunea actuală a sh este în curs de a fi modificată în conformitate cu specificațiile POSIX 1003.2 și 1003.2a pentru shell. Această versiune are multe caracteristici care fac ca aceasta să pară asemănătoare în unele privințe cu shell-ul Korn, dar nu este o clona de coajă Korn (a se vedea ksh (1)). Numai caracteristicile desemnate de POSIX plus câteva extensii Berkeley sunt încorporate în această coajă. Ne așteptăm ca conformitatea cu POSIX să fie eliberată de BSD 4.4. Această pagină de om nu este destinată să fie un tutorial sau o specificație completă a coajă.

Prezentare generală

Coajă este o comandă care citește linii fie dintr-un fișier, fie din terminal, le interpretează și, în general, execută alte comenzi. Este programul care se execută atunci când un utilizator se loghează în sistem (deși un utilizator poate selecta un shell diferit cu comanda chsh (1)). Cochilia implementează o limbă care are construcții de control al fluxului, o facilitate macro care oferă o varietate de caracteristici în plus față de stocarea datelor, împreună cu capabilitățile de editare istorică și de linie. Acesta include multe caracteristici care ajută la utilizarea interactivă și are avantajul că limba interpretativă este comună atât pentru utilizarea interactivă, cât și pentru cea non-interactivă (scripturile shell). Adică, comenzile pot fi introduse direct în shell-ul care rulează sau pot fi puse într-un fișier, iar fișierul poate fi executat direct de shell.

Invocare

Dacă nu există niciun flag și dacă intrarea standard a shell-ului este conectată la un terminal (sau dacă parametrul- i este setat) și opțiunea -c nu este prezentă, shell-ul este considerat o coajă interactivă. O coajă interactivă solicită, în general, înaintea fiecărei comenzi și manipulează erorile de programare și de comandă diferit (după cum este descris mai jos). La prima pornire, shell-ul inspectează argumentul 0, iar dacă începe cu o bara `- ', shell-ul este, de asemenea, considerat o coajă de conectare. Acest lucru este în mod normal făcut automat de sistem atunci când utilizatorul se loghează mai întâi. O cochilie de autentificare citește mai întâi comenzi din fișierele / etc / profile și .profile dacă există. Dacă variabila de mediu ENV este setată la intrarea într-un shell sau este setată în fișierul .profile al unei corespondențe, shell-ul următor citește comenzi din fișierul numit în ENV. Prin urmare, un utilizator ar trebui să plaseze comenzi care trebuie executate numai la timpul de conectare în fișierul .profile și comenzile care sunt executate pentru fiecare coajă din interiorul fișierului ENV . Pentru a seta variabila ENV la un anumit fișier, plasați următoarea linie în fișierul .profile al directorului de acasă

ENV = $ HOME / .shinit; export ENV

înlocuind cu numele "` .shinit '' orice nume de fișier pe care îl doriți. Deoarece fișierul ENV este citit pentru fiecare invocare a shell-ului, inclusiv scripturile shell și shell-urile neinteractive, următoarea paradigmă este utilă pentru a restricționa comenzile din fișierul ENV la invocarea interactivă. Comutați comenzile în `` case '' și ` esac '' de mai jos (aceste comenzi sunt descrise mai târziu):

cazul $ - în * i *)

# comenzi numai pentru utilizare interactivă

...

ESAC

Dacă au fost specificate argumentele liniei de comandă în afară de opțiuni, shell-ul tratează primul argument ca fiind numele unui fișier din care să citească comenzile (un script shell), iar argumentele rămase sunt setate ca parametri poziționali ai shell-ului ($ 1 , $ 2, etc). În caz contrar, shell-ul citește comenzi de la intrarea sa standard.

Procesarea listei de argumente

Toate opțiunile cu o singură literă au un nume corespunzător care poate fi folosit ca argument pentru opțiunea - o . Numele set- o este furnizat lângă opțiunea de o singură literă din descrierea de mai jos. Specificând o bordură `` - '', opțiunea este activată, în timp ce folosiți un plus `` + '' dezactivează opțiunea. Următoarele opțiuni pot fi setate din linia de comandă sau cu setul (1) încorporat (descris mai târziu).

-a allexport

Exportați toate variabilele alocate. (NEIMPLEMENTAT pentru 4,4 alfa)

-c

Citiți comenzi din linia de comandă. Nu vor fi citite comenzi de la intrarea standard.

-Noblobber

Nu suprascrieți fișierele existente cu ``> '' (UNIMPLEMENTED pentru 4.4alpha)

-E errexit

Dacă nu este interactiv, ieșiți imediat dacă o comandă netestată eșuează. Starea de ieșire a unei comenzi este considerată a fi testată în mod explicit dacă comanda este folosită pentru a controla un elif în timp ce sau până sau dacă comanda este operandu-l pe stânga unui operator `` & `` sau `` || '.

-f noglob

Dezactivați extinderea numelui de cale .

-n noexec

Dacă nu interactiv, citiți comenzi, dar nu le executați. Acest lucru este util pentru verificarea sintaxei scripturilor shell.

-U nounset

Scrieți un mesaj la eroarea standard când încercați să extindeți o variabilă care nu este setată și dacă shell-ul nu este interactiv, ieșiți imediat. (NEIMPLEMENTAT pentru 4,4 alfa)

-v verbose

Coaja își scrie intrarea la eroarea standard pe măsură ce este citită. Util pentru depanare.

-x xtrace

Scrieți fiecare comandă la eroarea standard (precedată de un "+" înainte de a fi executată.) Util pentru depanare.

-q liniștită

Dacă au fost setate opțiunile - v sau - x , nu le aplicați la citirea fișierelor de inițializare, acestea fiind / etc / profile .profile și fișierul specificat de variabila de mediu ENV .

-Mă ignor

Ignorați EOF-urile de la intrare atunci când sunt interactive.

-i interactiv

Forțează shell-ul să se comporte interactiv.

-m monitor

Activați controlul funcției (setat automat când este interactiv).

Stdin

Citiți comenzile de la intrarea standard (setați automat dacă nu există argumente de fișier). Această opțiune nu are efect atunci când este setată după ce shell-ul a început deja să fie difuzat (adică cu setul (1)).

-V vi

Activați editorul liniei de comandă vi (1) încorporat (dezactivează - dacă este setat).

-E emacs

Activați editorul de linii de comandă emacs (1) încorporat (dezactivează - dacă este setat).

-b notificare

Activați notificarea asincronă a finalizării lucrării de fundal. (NEIMPLEMENTAT pentru 4,4 alfa)

Structura lexicală

Shell citește intrări în termeni de linii dintr-un fișier și o sparge în cuvinte în spații albe și în anumite secvențe de caractere care sunt speciale pentru shell-ul numit "operatori". Există două tipuri de operatori: operatorii de control și operatorii de redirecționare (sensul acestora este discutat mai târziu). În continuare este o listă de operatori:

"Operatori de control:"

& && (); ;; | ||

"Operator de redirecționare:"

<>> | << >> <&> & << - <>

Citându-l

Citarea se utilizează pentru a elimina semnificația specială a anumitor caractere sau cuvinte în shell, cum ar fi operatorii, spațiul alb sau cuvintele cheie. Există trei tipuri de citare: potrivite citate unice, citate duble potrivite și backslash.

backslash

O retroscurgere păstrează semnificația literală a următorului caracter, cu excepția liniei Aq newline. O retrosamblare care precede o linie nouă Aq este tratată ca o continuare a liniei.

Citate unice

Închiderea caracterelor în citate unică păstrează semnificația literală a tuturor caracterelor (cu excepția citatelor simple, ceea ce face imposibilă introducerea cotelor unice într-un șir unic citat).

Citate dublă

Închiderea caracterelor în cadrul citatelor duble păstrează semnificația literală a tuturor caracterelor, cu excepția dolarii ($) și a backslash-ului (). Înapoi în interiorul ghilimelelor duble este istoric ciudat și servește doar pentru a cita următoarele caractere:

$ `\

În caz contrar, rămâne literal.

Cuvinte rezervate

Cuvintele rezervate sunt cuvinte care au înțeles special asupra cochiliei și sunt recunoscute la începutul unei linii și după un operator de control. Următoarele sunt cuvintele rezervate:

! Ta Elif Ta Ta în timp ce Ta caz

altceva Ta pentru Ta apoi Ta {Ta}

face Ta Ta făcut până Ta, dacă Ta esac

Sensul lor este discutat mai târziu.

Pseudonime

Un alias este un nume și o valoare corespunzătoare setată folosind comanda construită în alias (1). Ori de câte ori poate apărea un cuvânt rezervat (vezi mai sus) și după verificarea cuvintelor rezervate, shell-ul verifică cuvântul pentru a vedea dacă se potrivește cu un alias. În caz contrar, îl înlocuiește în fluxul de intrare cu valoarea sa. De exemplu, dacă există un alias numit `` lf '' cu valoarea `` ls-F '', atunci intrarea:

Dacă foobar

ar deveni

ls -F foobar

Aliasurile oferă un mod convenabil pentru utilizatorii naivi de a crea contorii pentru comenzi fără a trebui să învețe cum să creeze funcții cu argumente. Ele pot fi, de asemenea, folosite pentru a crea codul lexical obscur. Această utilizare este descurajată.

comenzi

Cochilistul interpretează cuvintele pe care le citează în funcție de o limbă, a cărei specificație nu se află în sfera acestei pagini a omului (consultați BNF în documentul POSIX 1003.2). În esență, o linie este citită și dacă primul cuvânt al liniei (sau după un operator de control) nu este un cuvânt rezervat, atunci shell-ul a recunoscut o comandă simplă. În caz contrar, poate fi recunoscută o comandă complexă sau o altă construcție specială.

Comenzi simple

Dacă o comandă simplă a fost recunoscută, shell-ul efectuează următoarele acțiuni:

  1. Cuvintele de bază ale formularului "name = value" sunt desprinse și atribuite mediului în care se află comanda simplă. Operatorii de redirecționare și argumentele lor (după cum este descris mai jos) sunt desprinse și salvate pentru procesare.
  2. Cuvintele rămase sunt extinse așa cum este descris în secțiunea numită "Extensii" și primul cuvânt rămas este considerat numele comenzii și comanda este localizată. Cuvintele rămase sunt considerate argumentele comenzii. Dacă nu s-a produs niciun nume de comandă, atunci asignările variabilei `` name = value '' recunoscute la punctul 1 afectează shell-ul curent.
  3. Redirecționările sunt efectuate conform descrierii din secțiunea următoare.

redirecționări

Redirecționările sunt folosite pentru a schimba unde o comandă își citește intrarea sau își trimite ieșirea. În general, redirecționările deschid, închid sau duplică o referință existentă la un fișier. Formatul global utilizat pentru redirecționare este:

[n] redir-op

unde redir-op este unul dintre operatorii de redirectionare mentionati anterior. În continuare este o listă a posibilelor redirecționări. Bq n este un număr opțional, ca în '3' (nu `Bq 3 'care se referă la un descriptor de fișier.

[n]> fișier

Redirecționați ieșirea standard (sau n) la fișier.

[n]> | fişier

Același lucru, dar suprascrie opțiunea - C.

[n] >> fișier

Adăugați ieșirea standard (sau n) în fișier.

[n]

Redirecționați intrarea standard (sau n) din fișier.

[n1] <& n2

Duplicată intrare standard (sau n1) din descriptorul de fișiere n2.

[n] <& -

Închideți intrarea standard (sau n).

[n1]> & n2

Efectul duplicat standard (sau n1) de la n2.

[n]> & -

Închideți ieșirea standard (sau n).

[n] <> fișier

Deschideți fișierul pentru citirea și scrierea pe intrarea standard (sau n).

Următoarea redirecționare este adesea numită "aici-document"

[n] << delimiter

aici-doc text ...

delimitator

Tot textul de pe liniile succesive până la delimiter este salvat și pus la dispoziția comenzii pe intrarea standard sau descriptorul de fișiere n dacă este specificat. Dacă se specifică delimitatorul specificat pe linia inițială, textul here-doc este tratat literal, altfel textul este supus extinderii parametrilor, substituției comenzilor și expansiunii aritmetice (așa cum este descris în secțiunea despre "Extensii") "Dacă operatorul este` `<< - '' în loc de` `<< '', atunci tab-urile din fișierul here-doc sunt desprinse.

Căutarea și execuția

Există trei tipuri de comenzi: funcții shell, comenzi încorporate și programe normale - iar comanda este căutată (după nume) în ordinea respectivă. Fiecare dintre ele sunt executate într-un mod diferit.

Când se execută o funcție shell, toți parametrii de poziționare a coajă (cu excepția lui $ 0, care rămâne neschimbat) sunt setați la argumentele funcției shell. Variabilele care sunt plasate explicit în mediul de comandă (prin plasarea atribuțiilor lor înaintea numelui funcției) sunt făcute la nivel local pentru funcție și sunt setate la valorile date. Apoi se execută comanda dată în definiția funcției. Parametrii poziționali sunt restabiliți la valorile inițiale când comanda este finalizată. Toate acestea se întâmplă în shell-ul curent.

Instalațiile Shell sunt executate intern pe coajă, fără a crea un nou proces.

În caz contrar, dacă numele comenzii nu corespunde unei funcții sau nu este încorporat, comanda este căutată ca un program normal în sistemul de fișiere (așa cum este descris în secțiunea următoare). Când se execută un program normal, shell-ul rulează programul, trecând argumentele și mediul în program. Dacă programul nu este un fișier executabil normal (adică, dacă nu începe cu "numărul magic" a cărui reprezentare ASCII este "#!", Atunci execve (2) returnează Er ENOEXEC atunci) shell-ul va interpreta programul într- subshell. În acest caz, shell-ul copilului se va reinitializa, astfel încât efectul va fi ca și cum ar fi fost invocată o nouă shell pentru a gestiona scriptul ad-hoc shell, cu excepția faptului că locația comenzilor hashed localizate în shell-ul părinte va fi reținută de către copil.

Rețineți că versiunile anterioare ale acestui document și codul sursă înseși se referă în mod înșelător și sporadic la un script de shell, fără un număr magic, ca fiind "procedura shell".

Căutarea căii

Când localizați o comandă, shell-ul mai întâi caută să vadă dacă are o funcție shell prin acel nume. Apoi caută o comandă încorporată de acel nume. Dacă nu se găsește o comandă încorporată, se întâmplă una din cele două lucruri:

  1. Numele de comenzi care conțin o slash sunt executate pur și simplu fără a efectua căutări.
  2. Cochilia caută fiecare intrare în PATH în schimb pentru comandă. Valoarea variabilei PATH ar trebui să fie o serie de intrări separate de colonii. Fiecare intrare constă dintr-un nume de director. Directorul curent poate fi indicat implicit printr-un nume de director gol sau explicit printr-o singură perioadă.

Starea de ieșire a comenzii

Fiecare comandă are o stare de ieșire care poate influența comportamentul altor comenzi ale shell-ului. Paradigma este că o comandă iese la zero cu normală sau cu succes, și non-zero pentru eșec, eroare sau o indicație falsă. Pagina man pentru fiecare comandă trebuie să indice diferitele coduri de ieșire și ce înseamnă ele. În plus, comenzile încorporate returnează codurile de ieșire, la fel ca și funcția shell shell executată.

Comenzi complexe

Comenzile complexe sunt combinații de comenzi simple cu operatori de control sau cuvinte rezervate, creând împreună o comandă mai complexă. În general, o comandă este una dintre următoarele:

  • comandă simplă
  • conducte
  • listă sau listă compusă
  • comandă compusă
  • funcție de definiție

Dacă nu se specifică altfel, starea de ieșire a unei comenzi este cea a ultimei comenzi simple executate de comandă.

conducte

O conductă este o secvență a uneia sau mai multor comenzi separate de operatorul de control |. Emisia standard a tuturor comenzilor, cu excepția ultimei comenzi, este conectată la intrarea standard a următoarei comenzi. Ieșirea standard a ultimei comenzi este moștenită din shell, ca de obicei.

Formatul unei conducte este:

[!] comandă1 [ comanda2 ...]

Ieșirea standard a comenzii1 este conectată la intrarea standard a comenzii2. Intrarea standard, ieșirea standard sau ambele comenzi sunt considerate atribuite de conducte înainte de orice redirecționare specificată de operatorii de redirecționare care fac parte din comandă.

Dacă conducta nu este în fundal (discutată mai târziu), shell-ul așteaptă ca toate comenzile să se finalizeze.

Dacă cuvântul rezervat! nu precede conducta, starea de ieșire este starea de ieșire a ultimei comenzi specificate în conductă. În caz contrar, starea de ieșire este logica NU a stării de ieșire a ultimei comenzi. Adică, dacă ultima comandă returnează zero, starea de ieșire este 1; dacă ultima comandă returnează mai mult de zero, starea de ieșire este zero.

Deoarece asignarea conductei de intrare standard sau de ieșire standard sau ambele are loc înainte de redirecționare, aceasta poate fi modificată prin redirecționare. De exemplu:

$ comanda1 2> & 1 | comanda2

trimite atât ieșirea standard, cât și eroarea standard a comenzii1 la intrarea standard a comenzii2.

A ; sau determină ca precedenta listă AND-OR (descrisă în continuare) să fie executată secvențial; a & produce executarea asincronă a listei OR-OR precedente.

Rețineți că, spre deosebire de alte tipuri de cochilii, fiecare proces din conductă este un copil al shell-ului invocat (cu excepția cazului în care este shell builtin, caz în care se execută în shell - dar orice efect pe care îl are asupra mediului este șters).

Comenzile de fundal -

Dacă o comandă este terminată de operatorul de control ampersand (&), shell-ul execută comanda asincron - adică shell-ul nu așteaptă terminarea comenzii înainte de a executa următoarea comandă.

Formatul pentru rularea unei comenzi în fundal este:

command1 & [command2 & ...]

Dacă shell-ul nu este interactiv, intrarea standard a unei comenzi asincrone este setată la / dev / null

Liste - În general vorbind

O listă este o secvență de comenzi zero sau mai multe, separate prin linii noi, punct sau virgulă sau ampersand, și opțional oprită de unul dintre aceste trei caractere. Comenzile dintr-o listă sunt executate în ordinea în care sunt scrise. Dacă comanda este urmată de un ampersand, shell-ul pornește comanda și trece imediat la următoarea comandă; altfel așteaptă terminarea comenzii înainte de a trece la următoarea.

Operatori liste de circuite scurte

`` && '' și `` || '' sunt operatori din lista AND-OR. `` && '' execută prima comandă și apoi execută a doua comandă dacă statusul de ieșire al primei comenzi este zero. `` || '' este similar, dar execută a doua comandă dacă statusul de ieșire al primei comenzi este nenul. `` && '' și `` || 'ambele au aceeași prioritate.

Flow-Control Constructs - dacă, în timp ce, pentru caz

Sintaxa comenzii if este

în cazul în care lista
apoi listați
[listă elif
apoi lista] ...
[altă listă]
Fi

Sintaxa comenzii în timp este

în timp ce lista
face lista
Terminat

Cele două liste sunt executate în mod repetat, în timp ce starea de ieșire a primei liste este zero. Comanda "până" este similară, dar are cuvântul până la locul lui, ceea ce o face să se repete până când starea de ieșire a primei liste este zero.

Sintaxa comenzii pentru este

pentru variabilă în cuvânt ...
face lista
Terminat

Cuvintele sunt extinse, iar lista este executată în mod repetat, cu variabila setată la fiecare cuvânt la rândul său. a face și a făcut poate fi înlocuit cu "` {'și ``}' '

Sintaxa comenzii pauză și continuă este

rupe [num]
continuă [num]

Pauza termină numarul cel mai intim pentru sau în timp ce buclele. Continuarea continuă cu următoarea iterație a celei mai interioare buclă. Acestea sunt implementate ca comenzi încorporate.

Sintaxa comenzii casei este

cuvânt de caz în
model) lista ;;
...
ESAC

Modelul poate fi de fapt unul sau mai multe modele (a se vedea modelele Shell descrise mai târziu), separate de caracterele `` ''.

Gruparea comenzilor impreuna

Comenzile pot fi grupate fie prin scriere

(listă)

sau

{list;

Primul dintre acestea execută comenzile într-un subshell. Comenzile încorporate grupate într-o listă nu vor afecta shell-ul curent. Cea de-a doua formă nu are o altă coajă, deci este puțin mai eficientă. Combinarea comenzilor în acest fel vă permite să redirecționați ieșirea lor ca și când ar fi fost un program:

{printf salut; printf lume \ n ";}> salut

funcţii

Sintaxa unei definiții a funcției este

comanda nume ()

O definiție a funcției este o instrucțiune executabilă; când se execută, instalează o funcție denumită nume și returnează o stare de ieșire de zero. Comanda este în mod normal o listă cuprinsă între `` `` și ``} ''

Variabilele pot fi declarate ca fiind locale la o funcție utilizând o comandă locală. Aceasta ar trebui să apară ca prima declarație a unei funcții, iar sintaxa este

local [variabilă -] ...

Local este implementat ca o comandă încorporată.

Când o variabilă este făcută locală, ea moștenește valoarea inițială și steagurile exportate și citite din variabila cu același nume în domeniul de aplicare din jur, dacă există una. În caz contrar, variabila este inițial dezactivată. Shell-ul folosește scoping dinamic, astfel încât dacă facem variabila x locală să funcționeze f, care apoi apelează funcția g, referințele la variabila x făcută în g se vor referi la variabila x declarată în interiorul f, nu la variabila globală numită x .

Singurul parametru special pe care îl putem face local este `` - '' '' '' '' '' orice opțiune de corespondență locală care este schimbată prin comanda set în interiorul funcției care urmează să fie restabilită la valorile inițiale atunci când funcția revine.

Sintaxa comenzii de retur este

returnați [exitstatus

Termina funcția de execuție curentă. Returnul este implementat ca o comandă încorporată.

Variabile și parametri

Cochilii mențin un set de parametri. Un parametru desemnat de un nume se numește o variabilă. La pornire, shell-ul transformă toate variabilele de mediu în variabile de shell. Noi variabile pot fi setate folosind formularul

name = valoarea

Variabilele stabilite de utilizator trebuie să aibă un nume care constă numai din alfabetică, numerică și subliniere - primul dintre acestea nu trebuie să fie numeric. Un parametru poate fi, de asemenea, notat cu un număr sau un caracter special așa cum se explică mai jos.

Parametrii poziționali

Un parametru pozițional este un parametru marcat cu un număr (n> 0). Cochilie le stabilește inițial la valorile argumentelor liniei de comandă care urmează numele scriptului shell. Setul (1) încorporat poate fi utilizat și pentru setarea sau resetarea acestuia.

Parametrii specifici

Un parametru special este un parametru indicat de unul dintre următoarele caractere speciale. Valoarea parametrului este afișată lângă caracterul său.

*

Se extinde la parametrii de poziție, pornind de la unul. Atunci când extinderea are loc într-un șir dublu-cotat, acesta se extinde într-un singur câmp cu valoarea fiecărui parametru separat de primul caracter al variabilei IFS sau de un spațiu dacă IFS este dezactivat.

@

Se extinde la parametrii de poziție, pornind de la unul. Atunci când expansiunea are loc în cadrul ghilimelelor duble, fiecare parametru pozițional se extinde ca argument separat. Dacă nu există parametri poziționali, extinderea lui @ generează argumente zero, chiar dacă @ este dublă cotată. Ce înseamnă, de exemplu, dacă $ 1 este `` abc '' și $ 2 este `` def ghi '', apoi Qq $ @ se extinde la cele două argumente:

abc def ghi

#

Se extinde la numărul de parametri poziționali.

?

Extinde la starea de ieșire a celei mai recente conducte.

- (Hyphen.)

Extinde la flag-urile opțiunii curente (numele opțiunilor dintr-o singură literă sunt concatenate într-un șir) așa cum este specificat în invocare, prin setarea comenzii încorporate sau implicit prin shell.

$

Extinde la ID-ul procesului shell-ului invocat. Un subshell păstrează aceeași valoare ca $ ca și părintele său.

!

Extinde la ID-ul procesului cea mai recentă comandă de fundal executată din shell-ul curent. Pentru o conductă, ID-ul procesului este acela al ultimei comenzi din conductă.

0 (Zero.)

Extinde la numele shell-ului sau al shell-ului.

Extensiile de cuvinte

Această clauză descrie diferitele extinderi care sunt efectuate pe cuvinte. Nu toate extensiile sunt efectuate pe fiecare cuvânt, după cum se explică mai târziu.

Extensii Tilde, extensii de parametri, substituții de comandă, expansiuni aritmetice și eliminări de citare care se produc într-un singur cuvânt, extinse la un singur câmp. Este vorba doar de divizare în câmp sau de extindere a căii care poate crea mai multe câmpuri dintr-un singur cuvânt. Singura excepție de la această regulă este extinderea parametrului special @ în cadrul ghilimelelor duble, după cum sa descris mai sus.

Ordinea extinderii cuvântului este:

  1. Extinderea Tilde, Extinderea parametrilor, Înlocuirea comenzilor, Extinderea aritmetică (toate acestea se produc în același timp).
  2. Divizarea câmpului se efectuează pe câmpurile generate de pasul (1), cu excepția cazului în care variabila IFS este nulă.
  3. Extensia numelui de cale (cu excepția cazului în care set - f este în vigoare).
  4. Citat Removal.

Caracterul $ este folosit pentru a introduce expansiunea parametrilor, substituirea comenzilor sau evaluarea aritmetică.

Tilde Expansion (înlocuirea directorului de domiciliu al unui utilizator)

Un cuvânt care începe cu un caracter tilde necotat (~) este supus extinderii tilde. Toate caracterele până la slash (/) sau la sfârșitul cuvântului sunt tratate ca un nume de utilizator și sunt înlocuite cu directorul de domiciliu al utilizatorului. Dacă numele de utilizator lipsește (ca în ~ / foobar), tilda este înlocuită cu valoarea variabilei HOME (directorul de acasă al utilizatorului actual).

Extinderea parametrilor

Formatul pentru extinderea parametrilor este după cum urmează:

unde expresia constă din toate caracterele până când potrivirea ``} '' Orice ``} '' a scăpat de o backslash sau într-un șir cotat, iar caracterele în expansiuni aritmetice embedded, substituții de comandă și extensii variabile nu sunt examinate în determinarea potrivirea ``} ''

Cea mai simplă formă de extindere a parametrilor este:

Valoarea, dacă este cazul, a parametrului este înlocuită.

Numele parametrului sau simbolul poate fi inclus în bretele, care sunt opționale, cu excepția parametrilor poziționali cu mai mult de o cifră sau atunci când parametrul este urmat de un caracter care ar putea fi interpretat ca parte a numelui. Dacă apare o extindere a parametrilor în interiorul citatelor duble:

  1. Extinderea numelui de cale nu se efectuează pe rezultatele extinderii.
  2. Divizarea câmpului nu se efectuează pe rezultatele extinderii, cu excepția lui @.

În plus, o extindere a parametrilor poate fi modificată utilizând unul dintre următoarele formate.

Utilizați valorile implicite. Dacă parametrul este dezactivat sau nul, expansiunea cuvântului este înlocuită; în caz contrar, valoarea parametrului este înlocuită.

Alocați valorile implicite. Dacă parametrul este dezactivat sau nul, extinderea cuvântului este atribuită parametrului. În toate cazurile, valoarea finală a parametrului este înlocuită. Numai variabilele, nu parametrii poziționali sau parametrii specifici, pot fi atribuite în acest fel.

Indicați eroarea dacă este nulă sau dezactivată. Dacă parametrul este dezactivat sau nul, extensia cuvântului (sau un mesaj care indică faptul că acesta este dezactivat dacă cuvântul este omis) este scris la eroarea standard și shell-ul iese cu o stare de ieșire nonzero. În caz contrar, valoarea parametrului este înlocuită. O coajă interactivă nu trebuie să iasă.

Utilizați valoarea alternativă. Dacă parametrul este dezactivat sau nul, nul este înlocuit; altfel, extinderea cuvântului este înlocuită.

În extensiile de parametri afișate anterior, utilizarea colonului în format duce la un test pentru un parametru care este dezactivat sau nul; omiterea colonului duce la un test pentru un parametru care este doar dezactivat.

String Length. Lungimea în caractere a valorii parametrului.

Următoarele patru varietăți de extindere a parametrilor prevăd procesarea subreverselor. În fiecare caz, pentru a evalua tiparele, se utilizează notația de potrivire a tiparelor (a se vedea modelele Shell), mai degrabă decât notarea expresiei regulate. Dacă parametrul este * sau @, rezultatul expansiunii este nespecificat. Închiderea șirului complet de extindere a parametrilor în ghilimele duble nu determină citarea următoarelor patru tipuri de caractere de tip, în timp ce citarea caracterelor din cadrul bretelelor are acest efect.

Scoateți cel mai mic model de sufix. Cuvântul este extins pentru a produce un model. Extensia parametrilor are ca rezultat parametrul, cu cea mai mică porțiune a sufixului, potrivită cu modelul șters.

Eliminați cel mai mare model de sufix. Cuvântul este extins pentru a produce un model. Extinderea parametrilor are drept rezultat parametrul, cea mai mare parte a sufixului fiind potrivită cu modelul șters.

Eliminați cel mai mic model de prefix. Cuvântul este extins pentru a produce un model. Extensia parametrilor duce apoi la parametru, cu cea mai mică porțiune a prefixului, potrivită cu modelul șters.

Eliminați cel mai mare model de prefix. Cuvântul este extins pentru a produce un model. Extensia parametrilor duce apoi la parametru, cea mai mare parte a prefixului fiind potrivită cu modelul șters.

Comandă de înlocuire

Comanda de substituție permite ieșirea unei comenzi să fie înlocuită în locul numelui comenzii în sine. Înlocuirea comenzii are loc atunci când comanda este închisă după cum urmează:

$ (Comanda)

sau Po versiunea `` coperta``` Pc:

`command`

Carcasa extinde substituția comenzii executând comanda într-un mediu subshell și înlocuind înlocuirea comenzii cu ieșirea standard a comenzii, eliminând secvențele unui sau mai multor s la sfârșitul substituției. (Încorporate s înainte de sfârșitul ieșirii nu sunt eliminate, totuși, în timpul divizării câmpului, acestea pot fi traduse în s, în funcție de valoarea IFS și care citează că este în vigoare.)

Extinderea aritmetică

Extinderea aritmetică oferă un mecanism pentru evaluarea unei expresii aritmetice și substituirea acesteia cu valoarea acesteia. Formatul pentru expansiunea aritmetică este după cum urmează:

$ ((Expresie))

Expresia este tratată ca și cum ar fi în dublu-ghilimele, cu excepția faptului că un dublu-citat în interiorul expresiei nu este tratat special. Carcasa extinde toate jetoanele în expresia de extindere a parametrilor, înlocuirea comenzilor și eliminarea citărilor.

Apoi, shell-ul tratează acest lucru ca o expresie aritmetică și înlocuiește valoarea expresiei.

Decuparea spațiului alb (divizarea câmpului)

După expansiunea parametrilor, înlocuirea comenzilor și expansiunea aritmetică, shell-ul scanează rezultatele extinderilor și înlocuirilor care nu au apărut în dublă citate pentru împărțirea câmpului și pot rezulta mai multe câmpuri.

Cochilia tratează fiecare caracter al IFS ca delimitator și utilizează delimitatorii pentru a împărți rezultatele câmpurilor de extindere a parametrilor și de substituire a comenzilor.

Extinderea numelui de cale (generarea numelui fișierului)

Cu excepția cazului în care parametrul - f este setat, generarea numelui fișierului se efectuează după terminarea diviziunii cuvântului. Fiecare cuvânt este privit ca o serie de modele, separate de tăieturi. Procesul de expansiune înlocuiește cuvântul cu numele tuturor fișierelor existente ale căror nume pot fi formate prin înlocuirea fiecărui model cu un șir care se potrivește cu modelul specificat. Există două restricții: în primul rând, un model nu poate corespunde unui șir care conține o slash și în al doilea rând un model nu poate corespunde unui șir care începe cu o perioadă, cu excepția cazului în care primul caracter al modelului este o perioadă. Următoarea secțiune descrie modelele utilizate atât pentru Extinderea căii de cale, cât și pentru comanda casetei (1).

Shell Modele

Un model este format din caractere normale, care se potrivesc cu ele însele, și meta-caractere. Meta-caracterele sunt `` `` `` `` `` `? '' Și` `['' Aceste personaje își pierd înțelesurile speciale dacă sunt citate. Atunci când se efectuează o înlocuire de comandă sau variabilă și semnul dolarului sau cotația inversă nu sunt citate dublu, valoarea variabilei sau a ieșirii comenzii este scanată pentru aceste caractere și acestea sunt transformate în meta-caractere.

Un asterisc (`` * '') corespunde oricărui șir de caractere. Un semn de întrebare se potrivește cu un singur caracter. Un bracket stânga (`` ['') introduce o clasă de caractere. Sfârșitul clasei de caractere este indicat de un (``] '') dacă ``] '' lipsește, apoi `` ['' se potrivește cu `` ['', mai degrabă decât introducerea unei clase de caractere. O clasă de caractere se potrivește cu oricare dintre caracterele dintre parantezele pătrate. O serie de caractere pot fi specificate folosind un semn minus. Clasa de caractere poate fi completată făcând un punct de exclamare primul caracter al clasei de caractere.

Pentru a include un ``] '' într-o clasă de caractere, faceți primul caracter afisat (după ``! '' Dacă există). Pentru a include un semn minus, face primul sau ultimul caracter enumerat

Builtins

Această secțiune listează comenzile încorporate care sunt încorporate deoarece trebuie să efectueze o operație care nu poate fi efectuată printr-un proces separat. Pe lângă acestea, există și alte câteva comenzi care pot fi construite pentru eficiență (de exemplu, ecou 1).

:

O comandă nulă care returnează o valoare de ieșire 0 (adevărată).

. fişier

Comenzile din fișierul specificat sunt citite și executate de shell.

alias [ nume [ = șir ... ]]

Dacă numele = string este specificat, shell-ul definește numele aliasului cu șirul de valori Dacă este specificat doar numele , se imprimă valoarea numelui alias. Fără argumente, aliasul încorporat imprimă numele și valorile tuturor pseudonimelor definite (a se vedea unalias)

bg [ job] ...

Continuați lucrările specificate (sau lucrarea curentă dacă nu sunt oferite nicio lucrare) în fundal.

comandă comanda arg ...

Executați comanda încorporată specificată. (Acest lucru este util când aveți o funcție shell cu același nume ca o comandă încorporată.)

cd [ director ]

Treceți la directorul specificat (implicit $ HOME) Dacă apare o intrare pentru CDPATH în mediul comenzii cd sau variabila shell CDPATH și numele directorului nu începe cu o slash, atunci directoarele listate în CDPATH vor fi căutate pentru directorul specificat. Formatul CDPATH este același cu cel al PATH Într-o coajă interactivă, comanda cd va imprima numele directorului la care sa schimbat efectiv dacă aceasta este diferită de numele pe care la dat utilizatorul. Acestea pot fi diferite fie pentru că a fost folosit mecanismul CDPATH , fie pentru că a fost traversată o legătură simbolică.

șir eval ...

Concatenați toate argumentele cu spații. Apoi reevaluați și executați comanda.

exec [ comandă arg ... ]

Cu excepția cazului în care comanda este omisă, procesul shell-ului este înlocuit cu programul specificat (care trebuie să fie un program real, nu un shell builtin sau o funcție). Orice redirecționări ale comenzii exec sunt marcate ca permanente, astfel încât acestea să nu fie anulate când se termină comanda exec .

ieșire [ exitstatus ]

Terminați procesul de coajă. Dacă este dat exitstatus este folosit ca stat de ieșire al shell-ului; în caz contrar se utilizează starea de ieșire a comenzii precedente.

nume de export ...

export -p

Numele specificate sunt exportate astfel încât acestea să apară în mediul comenzilor ulterioare. Singura modalitate de a dezimportiva o variabilă este de ao dezactiva. Cochilizatorul permite setarea valorii unei variabile în același timp exportată prin scriere

nume de export = valoare

Cu nici un argument, comanda de export afișează numele tuturor variabilelor exportate. Cu opțiunea - p specificată, ieșirea va fi formatată corespunzător pentru utilizarea non-interactivă.

fc [- e editor ] [ primul [ ultim ]]

fc-l [- nr ] [ primul [ ultim ]]

fc -s [ vechi = nou ] [ prima ]

Fc builtin listează, sau editează și re-execută, comenzi introduse anterior într-un shell interactiv.

E editor

Utilizați editorul numit de editor pentru a edita comenzile. Șirul de editor este un nume de comandă, supus căutării prin variabila PATH . Valoarea din variabila FCEDIT este utilizată ca valoare prestabilită când - e nu este specificată. Dacă valoarea FCEDIT este nulă sau nestabilită, se folosește valoarea variabilei EDITOR . Dacă editorul EDITOR este nul sau dezactivat, ed (1) este folosit ca editor.

-l (ell)

Listează comenzile mai degrabă decât invocând un editor pe ele. Comenzile sunt scrise în ordinea indicată de primul și ultimul operand, afectate de - r cu fiecare comandă precedată de numărul de comandă.

-N

Suprimați numerele de comandă atunci când listează cu -l.

-r

Schimbați ordinea comenzilor listate (cu - l sau editate (cu nici - l și nici - s)

-s

Re-executați comanda fără a invoca un editor.

primul

ultimul

Selectați comenzile care trebuie listate sau editate. Numărul de comenzi anterioare care pot fi accesate este determinat de valoarea variabilei HISTSIZE . Valoarea primei sau ultimei sau a ambelor sunt una dintre următoarele:

[+] Număr

Un număr pozitiv reprezentând un număr de comandă; numerele de comandă pot fi afișate cu opțiunea - l .

-număr

Un număr zecimal negativ reprezentând comanda care a fost executată anterior de numărul de comenzi. De exemplu, -1 este comanda imediat precedentă.

şir

Un șir indicând cea mai recentă comandă introdusă, care începe cu acel șir. În cazul în care operandul vechi = nou nu este de asemenea specificat cu - s forma de șir a primului operand nu poate conține un semn egal încorporat.

Următoarele variabile de mediu afectează executarea fc:

FCEDIT

Numele editorului de utilizat.

HISTSIZE

Numărul de comenzi anterioare care sunt accesibile.

fg [ job ]

Mutați lucrarea specificată sau lucrarea curentă în prim-plan.

getopts optstring var

Comanda getopts POSIX , să nu fie confundată cu getopt derivat de la Bell Labs (1).

Primul argument ar trebui să fie o serie de litere, fiecare dintre care poate fi opțional urmată de un colon pentru a indica că opțiunea necesită un argument. Variabila specificată este setată la opțiunea parsată.

Comanda getopts depreciaza utilitatea getopt (1) mai veche din cauza manipularii argumentelor care contin spatiu alb.

Getopts builtin poate fi folosit pentru a obține opțiuni și argumentele lor dintr-o listă de parametri. Când se invocă, getopts plasează valoarea următoarei opțiuni din șirul de opțiuni din lista din variabila shell specificată de var și este indexul în variabila shell OPTIND Când shell-ul este invocat, OPTIND este inițializat la 1. Pentru fiecare opțiune care necesită un argument, getopts builtin îl va plasa în variabila shell OPTARG Dacă nu este permisă o opțiune în optstring atunci OPTARG va fi dezactivată.

optstring este un șir de litere de opțiune recunoscute. Dacă o literă este urmată de un colon, este de așteptat ca opțiunea să aibă un argument care poate sau nu să fie separat de acesta de spațiu alb. Dacă un caracter de opțiune nu este găsit unde se așteaptă, getopts va seta variabila var la ``? '' Getopts va decupla OPTARG și va scrie ieșirea la eroarea standard. Prin specificarea unui colon ca primul caracter al optstring toate erorile vor fi ignorate.

O valoare nenuloasă este returnată la atingerea ultimei opțiuni. Dacă nu există argumente rămase, getopts va seta var la opțiunea specială, `` - '' altfel, va seta var la ``? ''

Următorul fragment de cod arată cum s-ar putea procesa argumentele pentru o comandă care poate lua opțiunile [a] și [b] și opțiunea [c] care necesită un argument.

în timp ce getopts abc: f
do
cazul $ f in
a | b) flag = $ f ;;
c) carg = $ OPTARG ;;
\?) echo $ USAGE; ieșirea 1;
ESAC
Terminat
schimb `expr $ OPTIND - 1`

Acest cod va accepta oricare dintre următoarele ca fiind echivalent:

cmd-fișier de fișier
cmd -a -c fisier fisier arg
cmd -carg - fișier de fișier
cmd -a -carg - fișier de fișier

hash -rv comanda ...

Cochilul menține o tabelă de tip hash care își amintește locațiile comenzilor. Fără argumente, comanda hash tipărește conținutul acestui tabel. Intrările care nu au fost examinate de la ultima comandă cd sunt marcate cu un asterisc; este posibil ca aceste intrări să fie nevalide.

Cu argumente, comanda hash elimină comenzile specificate din tabela hash (dacă nu sunt funcții) și apoi le localizează. Cu opțiunea - v , hash tipărește locațiile comenzilor pe măsură ce le găsește. Opțiunea - r determină comanda hash să ștergă toate intrările din tabela hash, cu excepția funcțiilor.

jobid [ locul de muncă ]

Imprimați id-urile de proces ale proceselor din lucrare. Dacă se renunță la argumentul de lucru, se utilizează lucrarea curentă.

locuri de munca

Această comandă afișează toate procesele de fundal care sunt copii ai procesului actual de shell.

PWD

Imprimați directorul curent. Comanda încorporată poate să difere de programul cu același nume, deoarece comanda încorporată își amintește ce este directorul curent, în loc să îl recompune de fiecare dată. Acest lucru face mai repede. Cu toate acestea, dacă directorul curent este redenumit, versiunea încorporată a pwd va continua să imprime numele vechi al directorului.

citiți [- p prompt ] [- r ] variabilă ...

Promptul este imprimat dacă este specificată opțiunea - p și intrarea standard este un terminal. Apoi se citește o linie din intrarea standard. Linia nouă descendentă este ștearsă din linie, iar linia este împărțită așa cum este descrisă în secțiunea de divizare a cuvintelor de mai sus, iar piesele sunt atribuite variabilelor în ordine. Trebuie specificată cel puțin o variabilă. Dacă există mai multe piese decât variabilele, piesele rămase (împreună cu caracterele din IFS care le-au separat) sunt atribuite ultimei variabile. Dacă există mai multe variabile decât piesele, variabilelor rămase li se atribuie șirul nul. Citirea încorporată va indica succesul dacă nu se întâlnește EOF pe intrare, caz în care se întoarce defecțiunea.

În mod implicit, cu excepția cazului în care este specificată opțiunea - r , coloana vertebrală `` \ '' acționează ca un caracter de evacuare, cauzând literalmente tratarea următorului caracter. În cazul în care un backslash este urmat de o nouă linie, lăsarea înapoi și noua linie vor fi șterse.

readonly nume ...

readonly -p

Denumirile specificate sunt marcate ca fiind numai citite, astfel încât acestea să nu poată fi modificate sau deconectate ulterior. Cochilie permite ca valoarea unei variabile să fie setată în același timp, fiind marcată doar prin scriere

readonly name = value

Cu nici un argument, comanda readonly afișează numele tuturor variabilelor numai pentru citire. Cu opțiunea - p specificată, ieșirea va fi formatată corespunzător pentru utilizarea non-interactivă.

setați [{- opțiuni | + opțiuni - arg ... ]

Comanda set efectuează trei funcții diferite.

Fără argumente, el afișează valorile tuturor variabilelor shell.

În cazul în care sunt oferite opțiuni, acesta stabilește indicatoarele de opțiune specificate sau le șterge conform descrierii din secțiunea numită Sx Argument Processing List.

A treia utilizare a comenzii set este de a seta valorile parametrilor de poziție ai shell-ului la argumentele specificate. Pentru a modifica parametrii poziționali fără a schimba opțiunile, utilizați "-" ca primul argument pe care să-l setați. Dacă nu există niciun arge, comanda set va șterge toți parametrii poziționali (echivalenți cu executarea `` shift $ #. ''

valoare variabilă

Alocă valorii variabilei. (În general, este mai bine să scrieți variabila = valoare decât să folosiți setvar setvar este destinat să fie utilizat în funcții care atribuie valori variabilelor ale căror nume sunt transmise ca parametri.)

schimbare [ n ]

Treceți de mai multe ori parametrii poziționali. O schimbare stabilește valoarea de $ 1 la valoarea de $ 2 valoarea de $ 2 la valoarea de $ 3 și așa mai departe, scăderea valorii de $ # de unul. Dacă n este mai mare decât numărul parametrilor poziționali, schimbarea va emite un mesaj de eroare și va ieși cu starea de returnare 2.

ori

Imprimați utilizatorul acumulat și timpii de sistem pentru shell și pentru procesele care rulează din shell. Starea de returnare este 0.

capcana semnal de acțiune ...

Cauza shell-ului pentru a analiza și executa acțiune atunci când oricare dintre semnalele specificate sunt primite. Semnalele sunt specificate prin numărul de semnal. Dacă semnalul este 0 , acțiunea este executată când shell-ul se oprește. acțiunea poate fi nulă sau `` - '' prima face ca semnalul specificat să fie ignorat și acesta din urmă determină acțiunea implicită. Atunci când shell-ul frânge un subshell , acesta resetează semnalele capturate (dar nu ignorate) la acțiunea implicită. Comanda capcana nu are efect asupra semnalelor ignorate la intrarea în shell.

tip [ numele ... ]

Interpretați fiecare nume ca o comandă și tipăriți rezoluția căutării comenzii. Posibilele rezoluții sunt: ​​cuvântul cheie shell, alias, builtin shell , comandă, alias urmărit și nu a fost găsit. Pentru pseudonime, expansiunea aliasului este imprimata; pentru comenzi și pseudonime urmărite este imprimat numele complet al căii de comandă.

ulimit [ -H -S ] [ -a -tfdscmlpn [ valoare ]]

Încercați sau stabiliți limite grele sau moi la procese sau setați noi limite. Alegerea între limita tare (care nu poate fi încălcată de nici un proces și care nu poate fi ridicată odată ce a fost redusă) și limita moale (care determină procesele să fie semnalate dar nu neapărat ucise și care poate fi ridicată) se face cu aceste steaguri:

-H

setați sau întrebați despre limitele greșite

-S

setați sau întrebați despre limitele soft. Dacă nu este specificat niciunul - H și nici - S , se afișează limita soft sau sunt setate ambele limite. Dacă ambele sunt specificate, ultima câștigă.

Limita care urmează să fie interogată sau stabilită, atunci este aleasă prin specificarea oricăruia dintre aceste steaguri:

-A

afișați toate limitele actuale

-t

afișați sau setați limita la timpul CPU (în secunde)

-f

afișați sau setați limita celui mai mare fișier care poate fi creat (în blocuri de 512 octeți)

-d

afișați sau setați limita dimensiunii segmentului de date a unui proces (în kilobyte)

-s

afișați sau setați limita mărimii stivei unui proces (în kilobyte)

-c

afișați sau setați limita la cea mai mare dimensiune a dumpului de bază care poate fi produsă (în blocuri de 512 octeți)

-m

afișați sau setați limita pentru memoria fizică totală care poate fi utilizată de un proces (în kilobytes)

-l

arătați sau setați limita pe cât de multă memorie se poate bloca un proces cu mlock (2) (în kilobyte )

-p

afișați sau setați limita numărului de procese pe care acest utilizator le poate avea la un moment dat

-N

afișați sau setați limita numărului de fișiere pe care un proces poate să le deschidă simultan

Dacă nu este specificat niciunul dintre acestea, limita de dimensiune a fișierului este afișată sau setată. Dacă este specificată valoarea, limita este setată la acel număr; altfel este afișată limita curentă.

Limitele unui proces arbitrar pot fi afișate sau setate utilizând utilitarul sysctl (8).

umask [ masca ]

Setați valoarea umask (a se vedea umask (2)) la valoarea octală specificată. Dacă argumentul este omis, se imprimă valoarea umask.

unalias [-] [ nume ]

Dacă numele este specificat, shell-ul elimină acest alias. Dacă este specificat - a, toate pseudonime sunt eliminate.

dezactivați numele ...

Variabilele și funcțiile specificate sunt dezactivate și neexportate. Dacă un nume dat corespunde atât variabilei, cât și funcției, variabila și funcția sunt dezactivate.

așteptați [ lucrare ]

Așteptați ca lucrarea specificată să finalizeze și să returneze starea de ieșire a ultimului proces în lucrare. Dacă argumentul este omis, așteptați ca toate lucrările să se finalizeze și să reveniți la starea de ieșire de zero.

Modificarea liniei de comandă

Atunci când sh este folosit interactiv de la un terminal, comanda curentă și istoricul comenzilor (vezi fc în Sx Builtins) pot fi editate folosind editarea liniei de comandă vi-mode. Acest mod utilizează comenzile descrise mai jos, asemănătoare cu o submulțime a celor descrise în pagina vi man. Comanda `set '-o vi permite editarea modului vi-mode și plasarea lui sh în modul de inserare vi. Cu vi-mode activat, sh poate fi comutat între modul de inserare și modul de comandă. Editorul nu este descris în întregime aici, ci va fi într-un document ulterior. Este similar cu vi: tastând Aq ESC vă va arunca în modul comandă VI comandă. Atacul Aq retur în modul de comandă va trece linia în shell.

Important: Utilizați comanda om ( % man ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.