>> [Seminar - scoici Unix, medii]
[Douglas Kline - Universitatea Harvard]
[Acest lucru este CS50. - CS50.TV]
>> Subiect de astăzi este shell Unix.
Sunt Douglas Kline, expert, sau cel puțin în mod rezonabil de utilizator competent, a carcasei.
Un shell este interfața pentru utilizator a sistemului de operare al calculatorului.
Numele este înșelătoare ca, spre deosebire de coajă unui animal,
care este greu și de protecție, shell-ul de calculator permite pentru comunicare.
Astfel membrană poroasă ar fi, probabil, o metaforă mai bună.
>> Carcasa originala pentru Unix este shell-ul Bourne.
Bourne este scris B-O-U-R-N-E.
Bourne a fost unul dintre autorii originali ai Unix,
și așa shell-ul este numit dupa el.
Numele care coajă ca o comandă este pur și simplu sh.
Asta e comanda, puteți executa.
Shell-ul începe la autentificare.
Când vă conectați la computer, shell-ul începe să ruleze doar pentru tine,
și asta e ceea ce ia comenzile.
Se poate începe de la alte momente, de asemenea.
Dacă vă aduce o fereastră cu nici o altă indicație, se va porni un shell pentru tine.
Asta e modul în care aceasta este ca poti sa te duci la o fereastră și începeți să tastați comenzile
și așa mai departe acolo, chiar dacă nu ai conecta la acea fereastră.
În plus, dacă faci o autentificare de la distanță,
atunci va începe un shell pe computerul la distanță.
Și este posibil pentru a rula comenzi fără un shell interactiv.
Asta poate însemna în operație curentă,
și aceasta poate însemna, de asemenea, o comandă de la distanță.
Ai putea trimite o comandă de la un alt calculator,
care include înființarea unei coajă acolo.
De fapt, trebuie să includă și deschidă o coajă acolo
chiar dacă acest lucru nu este scopul final.
Atunci când ceva începe în sus ca aceasta, nu începe în mod necesar un nou shell.
Dacă vă aduce o nouă fereastră, este posibil să-l spun pentru a aduce un editor
sau o altă comandă.
În acest caz, editorul va începe de la zero.
În cazul în care editorul se termină, fereastra se termină.
Acesta este un pic neobisnuit, dar se poate face.
În aceste cazuri, acesta nu va fi un shell.
Deci, nu este neapărat necesar ca o fereastra sau o astfel de cerere va aduce o coajă.
>> Shell analizează comenzi.
Parsarea înseamnă identificarea diferitelor elemente și clasificarea lor.
În termen de o comandă, șirul complet pe care îl tastați,
va exista un singur sau mai multe comenzi de executat.
Alte elemente pot fi argumente.
Nu poate fi, de asemenea, caractere speciale care afectează executarea unei comenzi.
Ei pot trimite de ieșire în altă parte decât pe ecran
în cazul în care comanda va trimite de obicei pe ecran.
Se poate redirecționa de intrare, se pot face alte lucruri, de asemenea.
Există diverse alte simboluri, caractere, și așa mai departe.
Parsarea presupune detectarea și interpretarea acestor lucruri.
>> Acum, în cazul în care nu există mai multe întrebări, care este destul de probabil, deoarece nu există mai multe persoane,
vom merge la pagina următoare mea aici.
>> Am spus mai devreme că shell Bourne este shell-ul inițial.
Mai sunt și alții.
Una este C-shell. Comanda este csh.
Nume C-shell este doar un joc de cuvinte.
Acest shell a fost introdus cu Berkeley Unix în mijlocul anilor 1970.
Berkeley Unix a fost un eveniment seminale în dezvoltarea de Unix.
A fost o revoluție mare și a inclus introducerea acestui coajă.
Motivul pentru care joc de cuvinte, C-coajă,
este faptul că C-shell are unele caracteristici în ea care se aseamănă cu limbajul C,
care shell Bourne nu are -
sau nu au avut la acel moment.
Există, de asemenea, TC-shell.
Acesta este un superset al C-shell.
Ea are caracteristici suplimentare, dintre care multe sunt utile pentru utilizare interactivă,
cum ar fi amintind comenzi în mecanismul de istorie,
pe care le voi descrie ceva mai târziu -
într-un mod simplu, modelat după un editor.
Ea are, de asemenea, legături care vă permit de a lega un șir cheie scurt, la o comandă mai mare.
Noi nu vom fi obtinerea în care ziua de azi.
Ea are unele caracteristici care sunt utile pentru programare.
Cu toate acestea, C-shell nu este adesea folosit pentru programare shell.
Programe Shell, dacă nu știu deja,
sunt programe care constau de caracteristici shell.
Ai putea rula ca aceste programe.
Ai scrie o grămadă de comenzi shell într-un fișier și executa fișierul.
Nu aveți nevoie să-l compilați. Acesta este un limbaj de interpretare.
Fraza C-shell-ul este acum ambiguu, deoarece s-ar putea referi doar la original C-shell, csh,
sau la toate C-carcase, inclusiv tcsh. E un pic cam ambiguu.
>> Un shell mai târziu este shell Korn, ksh, numit după programator, Korn.
Acest shell a încercat să includă în 1 coajă
avantajele C-shell pentru utilizare interactivă
și Bourne shell pentru programare.
Acesta a fost folosit ca un shell interactiv de unii oameni - o minoritate.
Mai târziu însă, nu a existat o altă introducere, coajă Bash, BASH,
din nou, un joc de cuvinte, Bourne, din nou coajă.
Este o extensie a shell-ul Bourne. Korn shell este, de asemenea. Ambele dintre ele sunt.
Ea are aceleași obiective ale shell Korn fuzionării C-shell-ului
și avantajele Bourne Shell în coajă 1.
Multe dintre îmbunătățirile de coajă Korn sunt, de asemenea, incluse în Bash.
Bash, cu toate acestea, are mai mult și de aceea este de preferat.
The Bourne Again Shell și-shell Korn sunt chemați scoici de tip Bourne
deoarece acestea includ caracteristici Bourne shell-ului,
care sunt incompatibile în unele privințe cu C-scoici.
Există și alte scoici în afară de cele, unele destinate utilizării limitată,
poate limita la unele comenzi, poate în scopuri de specialitate, care nu sunt utilizate de multe ori.
>> Bine. Articol următor aici.
Bash shell a devenit asociat cu diferite forme de Linux.
Nu sunt sigur dacă este adevărat de orice formă.
Există mai multe forme acolo și nu le-au folosit,
dar la cei care le-am folosit-o a devenit asociat cu ea.
În ceea ce știu, nu este nimic despre Bash
ceea ce îl face mai compatibil cu Linux
decât orice altă combinație de coajă și de sistemul de operare.
Cred că, probabil, acest lucru reflectă doar înclinațiile programatori.
Care a devenit asociat cu Linux este un alt motiv pentru a prefera Bash la KSH
deoarece lucrurile sunt susceptibile de a fi scris în ea și este probabil să se răspândească.
Îți voi da alte motive pentru care mai târziu.
Scripturi shell Bourne ar trebui să ruleze în coajă Korn sau Bash.
Dacă scrii ceva pentru shell Bourne,
puteți, probabil, o executa sub ksh sau bash.
Scripturi shell Korn va rula probabil în Bash, dar eu nu pot garanta asta.
Mai târziu aici, script-C-shell ar trebui să ruleze în cadrul TC-shell.
C-shell nu a fost niciodată de fapt, utilizat pe scară largă pentru scripting
de la Bourne coajă și mai târziu cojile de tip Bourne au fost de preferat pentru acest scop.
Așa că într-adevăr nu este tot atat de important.
Există destul de multe Bourne shell script-uri care au fost scrise mult timp în urmă,
înainte de shell Korn sau Bourne din nou carcasa au fost introduse.
Cei care sunt încă în uz, o parte din sistemele de operare,
și astfel le veți găsi, dacă te uiți în sistemul de operare
sau a unor pachete de programare vechi.
>> Bash este într-o oarecare măsură, să devină un fel de lingua franca pentru sisteme de operare.
A fost deja prelungit pentru Windows și a VMS.
VMS, în cazul în care nu știți, este un sistem de operare proprietar
de Digital Equipment Corporation, care este încă în uz, în mare parte în spatele scenei.
Și dacă o să fie difuzate pe mai multe sisteme de operare diferite,
probabil, oamenii au tendința de a schimba pentru ea.
Dar această evoluție este relativ recentă.
E doar începutul, așa că nu pot prezice dacă acest lucru se va dovedi a fi cu adevărat acest tip de lingua franca.
De asemenea, că cai de acces de fișiere și biblioteci diferă
dintre aceste sisteme de operare diferite,
s-ar putea să nu fie în măsură să scrie un script Bash pe un sistem de operare
și apoi rulați-l pe altul.
Ar trebui să fie capabil să-l mutați între diferite Unix, Linux
Sistemele de operare Mac OS, dar nu neapărat la Windows sau VMS.
S-ar putea să se schimbe descrieri fișier căii de acces,
și unele biblioteci pot fi diferite,
care ar putea afecta modul în care unele comenzi de lucru
sau modul în care procesul de argumente și altele asemenea.
În plus, o altă precauție aici este că nu există nici o garanție
că toate diferite cojile le-am menționat - Bourne shell, C-coajă,
TC-shell, Korn shell, Bourne din nou shell - vor fi disponibile în orice Unix
sau Linux sau calculator Mac OS.
Ei pur și simplu nu ar putea fi acolo.
Acesta este unul dintre precauțiile aici.
Este o limitare nefericit aici de când ai vrea ca lucrurile să meargă peste tot,
dar, din păcate, nu te poti baza pe asta.
>> Bine. Un viitor aici.
Să presupunem că doriți să scrieți un script de shell,
un program format din comenzi shell.
Scrii comenzile, le-a pus într-un fișier, și executa fișierul.
Ce se întâmplă dacă doriți să includă argumente?
În cazul operațiunilor de coajă, argumentele sunt numite parametrii sau parametri poziționali
și ei vor fi chemați de către un semn dolar și numeral, 1 $, 2 $.
Deci, dacă script-ul are acest nume, primul meu argument ar putea fi argumentul 1
și a doua mea ar putea fi un argument 2,
și în interiorul script-ul meu în cazul în care vreau să mă refer la aceste lucruri -
hai sterge acest lucru deoarece nu am cu adevărat de gând să-l rulați -
în script-ul meu am putea avea un dolar pentru a se referi la arg1,
2 dolari, care vor veni în acest fel, arg2.
Deci, aceste simboluri sunt disponibile pentru a se referi la argumente,
și cei care se aplică la toate cojile.
În plus, există și alte caractere.
$ * Se refera la intreaga lista de argumente, toate dintre ele.
$ # Se referă la numărul de argumente.
Din nou, acest lucru este valabil pentru toate cojile.
Aceste simboluri, * si #, pot fi utilizate cu aceste semnificații în alte locuri, de asemenea.
Noi nu va intra in asta.
>> Shell linie specificator. Ce e asta?
Să spunem că ați scris un scenariu și este pentru un anumit coajă și pe care doriți să îl rulați.
Cum știi ce plăti sistemul de operare va folosi pentru a rula script-ul dvs.?
La un moment dat ai putea presupune că ar rula în coajă Bourne
dacă nu ai spus altfel,
dar oamenii nu se mai scrie script-uri din Bourne shell care de mult
și nu mai pot chiar să se bazeze pe asta.
Deci, aici avem o linie de specificator coajă chiar aici.
Care specifică Bash.
Rețineți că se specifică in cale, / bin / bash.
În cazul în care un calculator are shell Bash, dar nu în directorul bin, / bin, acest lucru nu va funcționa.
Acesta este un alt calificativ, un alt precauție aici.
Semnul lira este caracterul linie de comentariu.
Care se aplică tuturor scoici.
Cazul special aici, #! la începutul unui script, este un caz special.
Care specifică coajă în care pentru a rula script-ul.
Așa cum spuneam, s-ar putea să nu fie în același loc / bin.
În plus, există un alt lucru aici.
Dacă utilizați doar semnul lire, cu nici un semn de exclamare și nume de cale,
care ar trebui să indice un C-shell.
Cu toate acestea, eu nu recomand sa faceti asta pentru că eu nu sunt în măsură să garanteze
că va funcționa întotdeauna.
Dacă doriți un C-shell, ar fi mai bine să spun așa.
Apoi, nu e ceva destul de confuze aici.
Dacă utilizați o linie shell specificator, cum ar fi / bin / bash
și că shell nu este disponibil acolo,
nu există nici un lucru, cum ar fi / bin / bash pe acel computer,
fie pentru că nu are Bash sau pentru că se află într-o locație diferită,
veți primi o eroare care vă spune că scenariul ai fugit nu există.
Și, desigur, există script-ul dvs., astfel încât mesajul de eroare este confuz.
Motivul pentru care sistemul de operare vă oferă această eroare
sau, mai precis, care shell-ul interactiv în care se execută acest lucru dă această eroare,
este faptul că rapoartele de comanda ai folosit, care este numele de script-ul.
Care comandă denumit în mod eficient shell cu numele de script-ul.
Asta în cazul în care primiți un mesaj de eroare confuze.
Un alt mod de a apela script shell
este de a specifica shell în linia de comandă, ca aici.
Aceasta este o comandă. Acest lucru spune alerga Bash și apoi executați script-ul meu în Bash.
Care va avea prioritate față de o linie de specificator,
iar acest lucru are funcția de permițându-vă pentru a asigura cai de acces diferite.
Dacă vă dau doar o comandă, sistemul de operare va căuta pentru că comanda
în diferite locuri.
În cazul în care este disponibil, acesta ar trebui să-l găsiți.
Computerul va găsi Bash oriunde se află și rulați-l,
astfel încât nu aveți nevoie apoi să fie preocupat de cazul în care se constată.
Există potențial alte preocupări aici,
ca și în cazul în care există mai mult de 1 versiune de Bash, care este posibil, deși puțin probabil.
Deci, asta e un alt mod de a face cu aceste lucruri.
Liniile specificator poate apela orice shell.
Ei pot apela, de asemenea, altele decât coji de lucruri.
Exemplele pe care le am aici sunt sed, care este editorul de flux;
awk, care este un limbaj de procesare model;
și perl, un limbaj de scripting foarte dezvoltat.
Dacă pui o linie specificator indică unul dintre aceste programe, la începutul,
se va merge direct în acest program, mai degrabă decât a începe o coajă.
Aceste programe au limite în abilitățile lor.
Perl este foarte capabil. Sed este un editor. Se poate face lucruri dincolo de simpla editare.
Dar poate fi dificil de a programa asta.
În plus, trecerea argumente și alte chestii pentru a script-ul este fie imposibilă sau confuze.
Deci, în aceste cazuri, cu awk sau sed, este, cel puțin în experiența mea,
de preferat pentru a scrie un shell script și apel awk sau sed de script de shell
mai degraba decat de asteptare awk sau sed ca linia de script specificator.
Perl este un limbaj extrem de diversificat, cum am spus.
Nu puteți rula comenzi interactive în Perl,
ceea ce înseamnă că nu se poate testa părți din script-uri care sunteți în curs de dezvoltare
prin rularea lor interactiv.
Cu toate acestea, este un limbaj extrem de capabil
și sa dezvoltat într-un instrument utilizat pe scară foarte largă.
Asta e doar un pic de o paranteză despre liniile de specificatorul.
>> În toate sau cele mai multe forme de Linux - din nou, eu nu pot fi sigur că e tot -
și în Mac OS, dacă tastați csh te tcsh,
și dacă tastați sh te bash.
Ei au fost încercarea de acolo pentru a vă oferi versiuni mai avansate ale acestor scoici,
dar acest lucru poate fi confuz.
Dacă ați scrie un script folosind tcsh sau Bash are timp de asteptare csh sau sh
și apoi încercați să-l rula pe un calculator care nu are tcsh sau Bash,
s-ar putea obține unele erori în cazul în care există comenzi acolo
care aceste coji nu recunosc.
În plus, este posibil să fi sunat shell-ul de pe computerul local
numindu-l ca sh sau csh și apoi obtinerea mai avansate scoici.
Nici măcar nu putea gândi la faptul că utilizați mai avansate shell.
Deci, aceasta este o potențială capcană.
Cum se stabilește că, dacă tastați sh te Bash,
dacă tastați csh te tsch?
Există lucruri în aceste calculatoare numite link-uri
care se poate conecta la dosar nume pentru a se referi la același lucru.
Acesta poate fi fie de 2 nume pentru același fișier sau un fișier al cărui scop este de a se referi la un alt fișier.
Se numesc link-uri hard și simbolice. Noi nu va fi mai merge în care azi.
S-ar putea fi, de asemenea, fișiere separate - 1 file SH, 1 file Bash -
dar ambele au alerga Bash.
Apoi, există un alt calificativ aici.
Dacă sunteți de asteptare unul dintre aceste cochilii de un nume,
ai putea crede că ai obține aceeași funcționalitate ca și numindu-l pe un alt nume.
Ei bine, că de fapt nu este neapărat adevărat.
Aceste comenzi pot examina numele prin care au fost numite
și ele pot, pe baza de acest nume, se comporta diferit.
Pot exista probleme de încercarea de a se conforma la un standard.
Unii dintre voi poate au auzit de standardul POSIX sau altul,
poate alte caracteristici.
Acest lucru poate fi selectat uneori de argumente în linia de comandă
sau prin setarea variabilelor de shell.
Numindu-l ca sh sau bash poate duce de fapt la o execuție diferit
chiar dacă e același dosar pe care o execută.
Un alt lucru să ia în considerare este că, chiar dacă un alt calculator are tcsh sau Bash,
în cazul în care nu sunt legate ca acestea sunt pe computerul local
dacă aveți un calculator local, Linux sau Mac OS,
apoi din nou, veți obține shell care te sun sh sau csh, nu cel pe care s-ar putea prefera.
Actualul Bourne shell are îmbunătățiri mai mică decât cele din Bash
dar pe lângă cele din coajă inițial Bourne.
Ca rezultat, chiar shell curent Bourne, sh,
chiar și atunci când nu este Bash, seamănă cu limbajul C mai mult decât C-shell nu.
Că nu era adevărat, atunci când C-shell a fost creat pentru prima dată, dar le-a dezvoltat în acest fel.
S-ar putea observa aici că toate aceste nume de coajă, cu excepția pentru shell-ul Bourne
au ceva să indice care shell sunt - csh, bash -
dar shell-ul Bourne este doar sh.
De ce? Asta a fost shell original.
Acesta a fost coajă atunci, nu o coajă,
și din moment ce era coajă, nu exista niciun motiv pentru a se distinge de la un alt shell.
Deci, de aceea are acest nume și nu încă.
>> Acest top de aici este o linie dintr-o bază de date parolă pentru un cont am acolo
pe un alt calculator.
Am de gând să încercați să obțineți numele astfel încât să puteți vedea că o parte de la sfârșitul, coajă.
Baza de date parola deține caracteristicile de conectare pentru toți utilizatorii.
La început este numele de utilizator, pe care le puteți vedea în ultimele două litere ale mele acum.
Câmpurile de aici sunt separate de doua puncte.
Ultimul câmp, după cum puteți vedea, este bin / tcsh, shell.
Acesta este specificatorul de coajă.
E ceva interesant aici.
Când Unix a fost dezvoltat în primul rând, nu a fost doar o coajă,
deci nu a fost ales acolo.
Deci, de ce acestea permit un câmp în baza de date parola pentru a specifica un shell?
Nu știu, dar e norocos că au făcut.
Este destul de dificil de a face schimbări în formatul de date parola
deoarece multe programe se referă la formatul său
și ar trebui să fie rescrise.
Este o evoluție fericită sau fortuit care au inclus acest domeniu.
Ca un fel de linie de fișier parolă este utilizat pe toate computerele Unix și Linux măsura în care știu.
Mac are propriul sistem.
Ea are de fapt un fișier parolă cu liniile din acest format,
dar că nu este cazul în care sunt definite caracteristicile utilizator.
O altă remarcă paranteze acolo.
>> Dacă sunteți de asteptare o coajă, se poate numi ca un sub-coajă de scoici existente.
Deci, dacă mă duc aici, hai să scăpăm de aceste lucruri.
Iată-mă în C-shell.
Că variabila, care identifică cu exactitate coajă mea,
de fapt, nu este întotdeauna un mod sigur de a determina ceea ce shell rulați,
dar în acest caz este.
Ce se întâmplă dacă am tip -
Acum sunt în Bash.
Unele lucruri sunt de gând să fie la fel. E mi-a spus poruncile Mele.
Dacă eu nu o suspende din nou pentru a-mi C-shell, LS, același. Corect?
fg, prim-plan, înapoi la shell-mi Bash.
PWD, directorul curent, înapoi la C-shell.
PWD, director diferit - de fapt, nu un director diferit în acest caz.
Este același director.
Să zicem că vreau să numesc o comandă aici: în cazul în care ls.
Ce face asta?
Ea mi-a spus în cazul în care comanda LS,
cel care îmi dă o listare director, este situat în ls.
Să ne întoarcem la Bash coajă. Să încercăm același lucru.
Hmm, interesant acolo, în cazul în care: comanda nu a fost găsit.
De ce este asta?
În cazul în care comanda este construit în la C-shell.
Aceasta nu este o comandă care trebuie să fie citite în memoria din altă parte și executat.
C-shell ruleaza prin transferul de execuție la o parte din propriul său cod
și nu este în coajă Bash.
Deci Bash, care nu au o astfel de comanda built-in, se pare pentru el, nu-l găsiți,
și am obține o eroare.
Deci nu avem o coajă Bash rulează sub un C-coajă, și numim ca un sub-shell.
Și doar în cazul în care sunteți curios, Bash coajă are propriul mod de a localiza comenzi.
trunchiată se referă la faptul că acesta poate fi executat mai rapid,
fiind găsit mai repede.
Acesta este unul dintre îmbunătățirile construite în unele dintre aceste scoici.
>> Scoici de tip Bourne sunt preferate pentru programare.
Ei au structuri de control, cum ar fi bucle, declarații condiționale,
un fel de comenzi pe care le-ar putea folosi în limbaje de programare cum ar fi C
sau orice limbă. Poate că sunteți de programare în Java sau orice altceva.
Scoici au cei prea.
Cojile de tip Bourne, în special Bash, au mai
și ele sunt proiectate cu o mai mare flexibilitate.
Bash învelișul are tablouri. Original Bourne shell nu.
Astfel că poate fi considerabil avantajoasă pentru programare.
C-shell de fapt, are tablouri, dar nu are o multime de alte caracteristici.
Cojile de tip Bourne va executa mai repede
în cazul în care nu au caracteristicile destinate utilizării interactiv.
Încărcați lucrurile jos pentru un singur scop, aceasta le încarcă în jos pentru un alt scop.
Nu e compromis acolo.
Acele caracteristici care sunt destinate a fi utilizate interactiv
într-adevăr sunt de puțin sau nici un folos pentru scripting.
Este posibil să se utilizeze un sub-shell interactiv la fel ca cea pe care am început acolo
pentru a testa comenzi pe care intenționați să le utilizați într-un script.
Asta e ceea ce nu se poate face cu perl. Poti sa o faci cu scoici.
Chiar și ale altor structuri de bucle și așa mai departe pot fi rulate interactiv.
Ele sunt uneori utile pentru a rula interactiv,
dar mult mai probabil esti le folosesc pentru a dezvolta un script.
>> Alias.
Acest lucru va fi despre C-shell.
Mecanismul de istorie în cazul în care te-ai întors la comenzile anterioare
sau părți din acestea pe care le-ați deja executați.
Din nou, despre C-shell, shell-ul Bourne și shell-ul Korn au aceste lucruri,
dar eu nu am de gând pentru a obține în ele.
Deci, aici sunt câteva pseudonime utile pe care le am.
În loc să tastați ls - este o comandă comună -
doar de tip l și salvați-vă un caracter.
E cu diverse opțiuni, toți cei de lucru.
Rețineți că aceste definiții au ghilimele jurul lor.
În aceste cazuri, ghilimelele nu sunt necesare.
Dacă se poate defini aceste alias-uri fără ghilimele, va funcționa în continuare.
Ele sunt recomandate.
Există situații în care nu puteți utiliza citat
pentru că vrei să se întâmple ceva care oferta ar împiedica.
Uneori, puteți cita parte a definiției, dar nu toate de el.
Este, de asemenea, în general, recomandat să folosiți ghilimele simple, mai degrabă decât ghilimele.
Ghilimele duble avea efecte asupra definițiilor variabile,
în special făcându-le să fie evaluate mai degrabă decât oprindu-l.
De ce ne-ar dori să se oprească evaluarea?
Și cum citate face asta pentru noi?
>> Aici este o comandă pe care s-ar putea găsi interesant.
"Ls g *"
g *, după cum probabil știți, este o expresie wildcard
pentru toate numele de fișiere care încep cu g.
Dacă am scrie intr-o comanda ls g *, voi primi o listă cu toate aceste nume în directorul meu curent.
Dacă am defini ca alias așa cum este aici cu citate,
se va rula ca comanda în directorul curent în cazul în care te-l rulează.
Dar, dacă aveți definiția alias fără ghilimele,
se va evalua wildcard g * atunci când se execută această comandă definire.
Deci, definiția alias va fi ls urmată de lista de fișiere în directorul
în care comanda alias este executat,
indiferent de locul în care de fapt intenționați să rulați comanda.
Acest lucru nu este de mare folos, și citatele unice preveni evaluarea asterisc.
Astfel încât să obțineți doar la definirea fiind ls g *.
Atunci când rulați alias, LGS, se pune apoi asta.
Acum nu există cotații, și se va evalua asterisc când executați comanda alias.
Deci asta e un lucru.
Ghilimele duble ar avea același efect aici,
dar există și alte cazuri în care ghilimele nu ar funcționa atât de bine.
>> Aici este un alt unul.
S-ar putea ști comanda grep.
Comanda grep poate fi folosit pentru a scana un fișier de linii care au anumite șiruri.
Deci, haideți să mergem pe aici și voi ieși din cochilia mea Bourne.
Bine. Iată un fișier.
Să zicem că e grep siruri de caractere abc. Nu este.
Dacă fac zddd grep, primesc nimic. Bine.
Deci, se constată un șir de caractere, se raportează, nu se găsesc, nu se raportează.
Să emită orice linie care are ca șir pe ea.
Există tot felul de opțiuni de aici, pe care le puteți găsi în documentația.
Iată un mod de a face acest lucru.
Ce spui de asta, alias grabc "grep abc"?
Care va include un argument atunci când alias-ul este definit.
Deci, dacă am face asta aici, acum, dacă eu fac grabc,
acum alias-ul include mai mult de comanda simpla. Ea are, de asemenea, argumentul.
Până în prezent, care funcționează.
Eu am o altă comandă de aici, asta, deci acestea sunt diferite siruri de caractere acolo
și arată că acest lucru nu va găsi nimic acolo, deoarece nu se potrivește.
>> Ce se întâmplă dacă vreau să includă în definiția alias fișierul pe care am de gând să caute
și vreau să dau ca un argument pentru alias șirul pe care caut?
S-ar putea să vă spun ABC ca argument pentru alias meu,
dar alias-ul a determinat deja dosarul.
Și asta e în cazul în care această expresie vine inch
Observați aici avem grep la fel ca înainte.
Avem dosarul aici, siruri de caractere.
\! ^, Un fel de expresie ciudat, cred că, dacă nu ați văzut acest lucru înainte.
Semn de exclamare este parte a mecanismului de istorie C-shell.
Se poate aminti comenzi anterioare, se pot aminti argumente pentru aceste comenzi și așa mai departe.
Mecanismul de istorie este utilizat ca parte a aliasing.
Dacă specificați o linie după semn de exclamare, se va referi la acea linie în lista de istorie,
care nu va fi obtinerea în prezent, deoarece este un alt subiect întreg.
Este posibil să se specifice o parte a unei linii.
Astfel! 03:02 ar fi al doilea argument de număr de comandă 3.
Cursorul aici, în această expresie reprezintă primul argument.
Dacă nu dau un indiciu de ce comanda te referi la,
se referă la comanda imediat anterioară,
și cursorul este un simbol pentru primul argument.
Pentru că e cursorului și nu numărul, nu aveți nevoie pentru a utiliza colon,
astfel! ^ înseamnă primul argument al comenzii precedente.
Un pic amestecat aici.
În acest caz, atunci când utilizați acest lucru ca pe o definiție alias,
de referință de istorie se referă înapoi la comenzile în care este folosit alias.
Deci, acest lucru se întâmplă din nou o comandă ca o operațiune de istorie,
ci ca o operațiune alias se referă la comanda în care trebuie să tastați,
spune, grstrings_file.
Avem citate aici, în ea. Care este backslash pentru?
În acest caz, ca și în altă parte, nu vrem să execute mecanismul de istorie
în timp ce definirea alias.
Dacă nu am avea backslash acolo, shell-ar trage în primul argument
a comanda chiar înainte de aceasta a fugit de această comandă alias, pe care nu vrem.
Ne dorim ca acest lucru să fie construit în a comanda alias de a apela la un argument mai târziu.
Singur citate nu se pot sustrage un semn de exclamare, referința istorie.
Poate că știți evadarea expresie înseamnă a schimba sensul de ceva.
În acest caz, înseamnă să oprească ceva de la a avea o semnificație specială.
Semnificație specială semn de exclamare este istorie.
Scăpa și nu are ca semnificație.
Citate nu fac asta; backslash face.
Deci, suntem de fapt, folosind 2 nivele de a scăpa de aici.
Am de gând să se mute această comandă într-o altă fereastră fără a introduce o
prin utilizarea acestor operațiuni de editare, care vă pot fi utile.
Altceva aici să-ți arăt.
Dacă tastați doar alias fără argumente, se va spune toate argumentele tale.
Aceasta este o grămadă de alias-uri am avut deja aici
în afară de cele pe care le-am folosit azi aici.
Dar dacă am tip cu numele de un alias, acesta mi-a spus ce înseamnă.
Observați că citatele sunt plecat și backslash este plecat.
Acest șir de aici este rezultatul acestei definiții alias,
și acum are doar! ^ în ea.
Acest lucru este de gând să se uite în siruri de caractere de fișiere pentru nimic.
Deci, dacă am face sfori grstrings_file, nu am da orice pentru a căuta acolo,
dar se uită în siruri de caractere.
Acesta nu a găsit siruri de caractere de text în siruri de caractere de fișiere, dar nu găsi abc.
Și nu găsesc asta.
Deci, aici ne dau un argument care lovește în definiția alias,
care este introdus în ea.
Este cazul în care această expresie provine de la.
Puteți utiliza mai mult de 1.
Cursorul este un simbol pentru primul argument.
Dacă ai vrut să utilizeze un al doilea argument, ai putea spune atunci: 2.
Nu e nici un simbol special pentru al doilea argument.
Și pentru că sunteți folosind un numeral, va trebui să utilizați de colon.
Există, totuși, o altă alegere aici.
Semnul dolar standuri pentru ultimul argument.
Și pentru că acesta este un simbol, se pot omite de colon.
Asa ca ar fi ultimul argument în listă.
Și există, de asemenea, că unul.
Asterisc înseamnă toate, astfel încât aceasta este lista completă argument,
și din nou, puteți omite de colon, deoarece nu este un numeral.
Sper că respectarea tuturor asta.
>> Mecanismul de istorie pot merge înapoi la liniile anterioare în lista de istorie.
Ai putea face acest lucru într-o definiție alias.
N-am mai văzut acest lucru făcut.
Aceasta ar avea ca efect scoaterea comenzi anterioare din lista de istorie
atunci când executa alias, care ar putea fi comenzi diferite
în funcție de când și în cazul în care o executa.
Teoretic este posibil să doriți pentru a scoate o astfel de trimitere
doar să știu ce a fost o comandă mai devreme.
N-am mai văzut acest lucru.
Cred că cineva ar putea dori, dar acest lucru este foarte puțin probabil.
Nu este un alt lucru aici.
Dacă utilizați ca referință de istorie-tip,
apoi sunt utilizate numai argumentele pentru care există o astfel de trimitere.
Dacă aveți o definiție alias care nu utilizează o referință de istorie-tip,
dacă devine doar începutul comenzii
și aveți argumente suplimentare, atunci orice veți scrie după care
vor fi adăugate la comanda.
În acest caz, exemplul doar i-am dat acolo, am folosit primul argument;
nu am folosit nici alții.
Dacă alte argumente au fost date in linia de comanda, acestea nu vor fi utilizate.
Deci, dacă utilizați de referință de istorie, la toate, atunci trebuie să-l folosească pentru a obține orice argument.
>> Mai e ceva aici, vreau doar să menționez, în parte paranteză,
și anume că acest mecanism istorie cu semn de exclamare
merge înapoi la original C-shell.
Tcsh a introdus operațiunile de istorie
care folosesc tipurile de comenzi și siruri de caractere de la editori,
fie Emacs sau vi.
Părerea mea personală este Emacs este mult mai ușor de utilizat pentru acest scop
chiar dacă vi folosiți pentru editare regulat.
Există mai multe comenzi Emacs care sunt acum adaptate pentru istorie.
De control P devine linia anterioară în lista de istorie.
Un alt control P veți obține cea înainte.
Săgeata în sus face același lucru.
De control N devine următoarea comandă dacă ați defilat deja înapoi unele moduri.
Săgeată în jos face asta.
Puteți muta la stânga la dreapta cu săgeți și diverse alte lucruri.
Acest lucru se poate face uz de mecanismul istoriei
mult mai ușor decât folosind sintaxa punct de exclamare,
dar nu s-ar folosi într-o definiție alias.
Vom trece peste asta altă dată.
>> Variabile.
Știi ce variabile sunt în limbaje de programare.
Cojile le au, de asemenea.
C-shell folosește comanda setat pentru a atribui variabile,
astfel încât setează variabila a pentru valoarea b -
așa cum am spus, o definiție inutil, ci o ilustrare a modului în care este folosit acest.
Comanda set va crea o variabilă în cazul în care nu există deja.
Parametrii pozitionali de script-uri shell pot fi considerate variabile,
dar utilizarea lor, precum și normele pentru acestea sunt oarecum diferite.
Nu se poate atribui o valoare de 1 dolar în cursul unui script.
Tu ar trebui să definească o nouă variabilă în acest sens, dacă unii dintre voi a vrut să.
Tip set cu argumente și veți obține o listă cu toate variabilele definite în prezent.
Și să trecem pe la alte cochilia mea aici și să vedem ce putem obține dacă facem asta.
Destul de o listă lungă acolo, corect?
Derulați în sus un pic. Uită-te la toate astea.
Unele dintre aceste lucruri sunt definite în mod automat de shell.
Învelișul creează variabile și îi dă o valoare.
Unele dintre ele sunt definite de coajă, dar apoi redefinit de către utilizator
în funcție de preferințele sale.
Iar unele dintre ele sunt create de către utilizator, în funcție de ceea ce face el în acea zi.
Care este stabilit doar cu nici un argument.
Există o caracteristică ciudat aici de acest lucru.
Nu trebuie să fie fie spații între semnul egal și numele variabilei
și valoarea sau spațiile de pe ambele părți ale semnului egal,
ca în aceasta.
Acest lucru nu va funcționa, iar acest lucru este de fapt o comandă validă
dar aceasta nu va face ceea ce intenționați.
Care comandă va funcționa, deoarece, dacă ai spus stabilit și un nume de variabilă
cu nici un semn egal sau pentru a seta și un nume de variabilă cu semnul egal și nici o valoare,
se va seta variabila la o valoare nulă.
Deci, un set = este o comandă validă.
Comanda set poate defini mai mult de 1 variabil pe aceeași linie.
Deci, această comandă de aici are efectul de a defini atât a și b la valori null.
Probabil că nu ceea ce vrei.
Asta de aici, am menționat mai devreme, va duce la o eroare
deoarece = b nu este o expresie validă.
Un nume de variabilă nu poate începe cu semnul egal.
Și acolo sunt aceste lucruri în continuare aici.
Două puncte au fost folosite pentru a selecta argumente de la liniile de istorie,
și ele pot fi folosite - și nu am mers în înainte - de a modifica aceste lucruri.
Ele pot fi de asemenea utilizate pentru a modifica variabile shell.
Asta de aici, $ a, are o valoare.
: R va decola o extensie.
O extensie va fi nimic în urma unui punct,
un punct și orice urma o la sfârșitul unui fișier,
numai la sfârșitul listei după ultimul slash.
Așa că am avea aici.
o este că. Aceasta va scadea. O.
În cazul în care nu există nici o extensie, doar fiecare cale după ultimul slash, nu va avea nici un efect.
o: h, ca expresie variabilă, va lua de pe ultimul element al unei liste de directoare,
din nou, numai după ultima slash.
Deci, / a / b / c devine / a / b,
dar acesta este schimbat, deoarece elementul după lista este nul.
Aici există ceva care, de asemenea, vreau să subliniez.
Aceste calificări nu caută pentru existența acestor fișiere.
Se uita doar pentru siruri de caractere.
Acestea sunt menite să manipuleze nume de fișiere, cai de acces,
dar ele pot fi folosite pe orice șir, chiar dacă acesta nu este un nume de fișier.
Și nu uita de existenta,
așa că, dacă nu există un astfel de fișier, / a / b / c, acesta va funcționa în continuare.
Fie că este vorba de nici un folos este o altă întrebare, dar se va lucra în continuare.
Variabilele sunt diferite în scoici Bourne. Vom ajunge la asta mai târziu.
Semn dolar poate fi scăpat ca semn de exclamare și asteriscul.
Semn dolar poate fi scăpat cu o bară oblică inversă sau ghilimele unice.
Ghilimele duble au ca efect ciudat în toate scoici
de a impune evaluarea unui dolar semn expresie variabilă.
Deci, dacă e să fie scăpat într-un fel, ghilimelele duble pot avea ca efect
de determinând-o să fie evaluate oricum.
Acesta este un pic confuz.
Dacă există mai multe niveluri de a scăpa, cum ar fi ghilimele simple în interiorul ghilimele duble
sau ghilimele duble în interiorul ghilimele simple, trebuie să testați pentru a vedea ce se va întâmpla
pentru o variabilă dacă utilizați unul.
Aceste două situații - în interiorul dublu de singur în interiorul, unic de dublu -
nu vă dau în mod necesar același rezultat.
Variabilele de mediu, variabile C-shell legate.
Variabile de mediu sunt, de asemenea, variabile în C-shell,
și acestea sunt, de asemenea, variabile în alte coji de asemenea.
In C-shell, acestea sunt seturi distincte.
Lucrurile pe care le spuneam mai devreme sunt de variabile coajă.
Variabile de mediu sunt un set distinct de variabile
cu excepția de mai multe variabile pe care le numim variabile legate,
care sunt foarte importante si vom ajunge în cele mai târziu.
Variabile de mediu sunt transmise în mod automat la
la cochilii sau comenzile care sunt rulate de la shell.
Celelalte lucruri nu sunt. Variabilele coajă, alias-urile nu sunt. Variabile de mediu sunt.
De aceea le numim variabile de mediu,
ideea fiind că mediul se extinde trecut doar shell-ul curent.
Ele pot fi folosite pentru a defini lucrurile pentru comenzi.
Aici este un exemplu. PRINTER, LPDEST.
Ambele aceste variabile pot defini o imprimantă care o comandă va folosi pentru a imprima lucrurile.
Dacă aveți mai multe imprimante în jur, ați putea dori să pună unul care vă place.
Motivul pentru care avem 2 variabile este faptul că diferite seturi de comenzi au fost scrise
folosind aceste variabile diferite.
Tu le-ar putea da valori diferite.
Cel mai probabil le veți oferi atât aceeași valoare.
Aceste lucruri de lucru, deoarece comenzile care fac imprimare
au fost programate pentru a examina valorile acestor variabile.
Dacă un program nu au fost scrise în acest fel, în cazul în care au fost scrise pentru a face altceva,
variabila ar fi irelevant.
Deci, sistemul de operare nu este în căutarea pentru aceste variabile
de fiecare dată când se referă la o imprimantă.
O comandă care face tipărirea este în căutarea pentru aceste variabile, dacă este programat în acest fel.
Aceste variabile sunt adesea definite în fișierele de inițializare
dar nu neapărat.
Aveți posibilitatea să le defini pe linia de comandă.
Acestea pot fi definite într-o comandă.
O comandă care ruleaza ceva s-ar putea avea propria selecție de variabile -
variabile care sunt unice pentru un anumit pachet software, de exemplu.
Acestea vor fi definite atunci când rulați pachetul.
Cum sunt aceste variabile trecut la un sub-shell?
Când un sub-shell este scris, acesta nu scrie în acea zonă.
Zona de sub-shell, care este dedicat pentru variabilele de mediu
nu este scris de către sub-shell, este scris de copiere.
Când executați o comandă obișnuită, cum ar fi aceste comenzi pentru a imprima sau orice altceva,
ei începe prin crearea unui nou shell.
Shell-ul creează o coajă și apoi suprascrie o parte din ea
cu comanda pe care rulați, care este un pic confuz,
dar asta e modul în care aceste comenzi obține variabilele de mediu
că ele se referă apoi la mai târziu.
Comanda aici pentru definirea setenv variabil.
Asta e modul în care o definesc. Este 3 elemente: setenv, variabile, de valoare.
Dacă tu chiar setenv fără argumente, ceea ce face tu a lua?
O listă a tuturor acestor variabile.
Din nou, aceasta este o listă frumos lung și, în acest caz, ca și în celelalte,
aceste variabile sunt definite în mare măsură de operație mea de conectare de shell în sine
mai degrabă decât de orice am făcut.
Nu este o altă comandă de aici, printenv.
Care, de asemenea, imprimă mediului.
Observați acest ultim lucru aici, editor = vi.
Care spune că, dacă eu sunt, folosind ceva care numește un editor
și eu nu specificați un editor și mi-a permite alegerea, se poate da-mi vi.
Ce se întâmplă dacă fac EDITOR printenv? Ea mi-a spus ce este.
Chiar înainte de asta, a fost o variabilă, mai puțin.
Acestea sunt opțiunile implicite atunci când rulați comanda mai puțin,
care afișează fișiere.
Deci, dacă am face asta, printenv poate dura 1 sau 0 argument argumente,
nu mai mult de 1.
Există și alte comenzi, de asemenea, dar noi nu vom intra în tot ceea ce ziua de azi.
Amintiți-vă s-au modificatorii pentru variabilele de shell, cum ar fi: h,
care va scadea ultimul element de o cale,
sau: r, care va scădea o extensie.
Cei care aplica acum la variabilele de mediu prea. Ei nu au folosit pentru.
Este folosit pentru a fi nu au putut fi modificate. Acum, ele pot fi.
Este unul dintre avansuri cu evoluțiile din cojile de-a lungul anilor.
Spuneam că scoici, ca parte a mediilor
și variabile coajă din C-shell sunt, cu unele excepții, seturi distincte.
Puteți stabili o variabilă de mediu și o variabilă de shell cu același nume.
Acestea vor fi diferite variabile, ele pot avea valori diferite.
Schimbarea valorii unul nu se va schimba valoarea celuilalt.
Aceste variabile sunt toate evaluate cu semnul dolar - $ a, $ orice.
Deci, ce dacă ai asta? Știi ce o ai?
În testele mele am ajuns variabila coajă,
dar acest lucru nu este documentată și nu te poti baza pe asta.
Așa că vă întreb, este de a crea variabile de coajă și de mediu
cu același nume o idee bună? Nu. Bine.
Care sunt cele mai importante excepții în care variabilele mediul și Shell
sunt legate între ele?
Există aceste 4.
Scrisoare de capital variabilă de mediu TERM,
coajă termen variabil în litere mici, tip de emulare de terminal.
Mă duc să meargă pe aici și am de gând să fac ecou, ​​o comandă util aici,
$ $ TERMEN termen. Și acolo.
xterm este un tip de terminale pentru ferestre afișate în X Window System.
xterm-culoare este o variație de care care permite diferite culori.
De ce ne definim astea? Ce este acest lucru bun pentru?
Comenzile care rearanja ecran, cum ar fi editorul
trimite anumite secvente, numite secvențe escape,
la un terminal sau o fereastră pentru a rearanja și așa mai departe.
Aceste secvențe sunt diferite pentru diferite tipuri de terminale.
Acest lucru care să le folosim spune.
Uneori, există probleme acolo.
S-ar putea dori să schimbe acest lucru.
Dacă lucrurile nu sunt de lucru, uneori, tipul de terminal este setat greșit,
ați putea fi capabil să-l repara prin redefinirea variabila pe termen lung.
În aceste cazuri, schimbarea o variabilă, variabila de mediu sau variabila de shell,
ar trebui să schimbe celălalt.
Am descoperit prin experiență care schimbă pe termen lung în majuscule
nu se schimbă mereu coajă termen variabil în litere mici.
Acesta este un bug.
Nu știu dacă asta e întotdeauna adevărat. Cele mai multe ori nu este adevărat, dar ea poate fi.
Deci, dacă vă face o schimbare, trebuie doar să verificați că afară.
Nu e de multe ori că aveți nevoie pentru a schimba această valoare, dar din când în când faci.
USER variabilă de mediu.
Din nou, variabilă de mediu cu majuscule, coajă variabil în litere mici.
Acesta este numele dvs. de utilizator.
Este numai în circumstanțe excepționale
care le-ar dori să schimbe acest lucru.
În cazul în care numele de utilizator este altcineva, se poate arunca tot felul de lucruri pe.
Directorul home, directorul home al utilizatorului.
Din nou, nu te-ar vrea să schimbe acest lucru.
Observați în toate aceste cazuri și cea pe care suntem pe cale de a acoperi, variabila cale,
variabilă de mediu este cu majuscule și variabila de shell este legat în litere mici.
Dacă modificați una, ar trebui să schimbe cealaltă.
Acest tip de legare nu poate fi stabilit ca nu se poate lega două variabile,
altele decât aceste 4, și legarea în aceste variabile nu poate fi anulată,
nu le puteți separa.
Deci, aceste 4 perechi de variabile sunt legate.
Ei întotdeauna vor fi. Nimeni altcineva nu va fi.
In plus, ar fi posibil să se creeze variabile cu același nume
dintre tipurile opuse.
Ai putea face un termen variabila de shell în litere mici
sau un mediu TERM variabilă cu majuscule.
Aceste variabile ar fi independent de aceste variabile pereche
și ar fi independente una de cealaltă.
Nu-mi pot imagina de ce ar face asta dacă nu vrei să confunde oameni.
Asta de aici, variabila PATH, acesta este unul foarte important.
Un alt lucru este că nu poate exista cazuri
variabilelor asociate și cu nume similare care nu sunt legate între ele.
Nu pot fi variabile, SHELL și coajă, în capitale și litere mici.
Pe baza acestui nume, nu știu dacă că variabila este o variabila de shell
sau o variabilă de mediu, și ei nu legați unul de altul.
Deci, acest tip de nume asociat nu implică variabile legate.
Variabila cale, pe care am fost arata mai înainte,
este o listă de cai de acces în care coajă caută comenzi.
Să trecem peste această fereastră aici și vom face echo $ PATH, cu majuscule -
variabilă de mediu - echo $ cale, litere mici - coajă variabil.
Observați că lista de directoare este același. Acestea sunt legate.
Schimba unul, schimba celălalt.
În variabila de mediu elementele sunt separate prin doua puncte. Observați că.
Variabilele de shell sunt separate prin spații.
Această variabilă de mediu este un singur șir.
Variabila shell este o matrice.
Bourne shell nu a avut tablouri.
Bash face, dar aceasta este deja o parte fixă ​​a carcasei.
Acesta este un singur șir și nu o matrice.
C-shell avut întotdeauna tablouri.
Matrice sunt mult mai ușor de a lucra cu.
Aveți posibilitatea să se refere la părți din acesta.
$ Cale atât de ecou [1] și I a lua / usr / bin, primul element.
Din nou, amintiți-vă dolar semn standuri pentru ultimul element din lista de istorie.
Ce se întâmplă acolo? A încercat să găsească un semn dolar ca un simbol variabil.
Am scăpa de ea. Oops. Nu ar lua nici asta.
Unele dintre aceste lucruri nu funcționează atât de bine.
Poate vom pleca doar asta.
Asterisk se referă la totul, dar asta e ceea ce veți obține, dacă nu se specifică un element.
Un alt mod care variabilele matrice poate fi manipulat,
Numărul de elemente de acolo, 7 elemente.
Aici am pus semnul de lire înainte de numele variabilei.
Aici este un alt unul. A pus un semn de întrebare acolo.
Aceasta este o valoare logică. Aceasta indică faptul că există variabila.
Este un alt mod de a lucra cu variabile.
Care, apropo, nu trebuie să fie o variabilă array.
Care ar putea fi orice variabilă.
Și dacă o fac, nu exista nici o astfel de variabilă și I a lua un 0.
Un alt lucru mic acolo despre evaluări variabile.
Înapoi la asta de aici, în cazul în care pentru un motiv sau altul a vrut să lucreze cu acest
mai degrabă decât de lucru cu matrice, variabila coajă,
există comenzi care se pot separa aceste lucruri bazat pe colon.
De fapt, dacă ai de gând să faci acest lucru în Bash coajă, eventual,
un fel de script, care ar fi, probabil, modul în care ar face-o.
Dar în C-shell este mult mai ușor de a utiliza matrice.
În coajă Bourne, variabilele sunt atribuite de către o singură expresie ca aceasta,
cum ar fi modul în care s-ar putea atribui o variabilă într-un limbaj de programare,
și aici nu trebuie să existe spații.
Este necesar ca aceasta să fie doar un șir.
În cojile de tip Bourne, toate variabilele sunt variabile coajă.
Variabile de mediu sunt un subset de variabile shell.
Ele se deosebesc de variabilele non-mediu de export.
Porunca de a face acest lucru este de export, cum ar fi PRINTER export.
Dacă ar fi să definim un astfel de variabile,
dacă ne-am dorit o comandă de imprimare să-l găsiți, ar trebui să fie o variabilă de mediu,
și că e modul în care am face-o.
Aici e ceva fel de confuz.
Această expresie, export pentru mediu, deriva din acest concept coajă Bourne,
și totuși această expresie este folosită în descrieri ale C-shell,
în cazul în care nu există o astfel de comandă ca export.
Dacă spui doar de export de la sine, veți obține o listă de export -
Deci, dacă am doar exportă aici, nici un astfel de lucru.
Bine, acolo mergem.
Aceste lucruri, de altfel, sunt, de asemenea, definite de shell.
Nu am defini oricare dintre acestea de unul singur.
Shell-ul face tot felul de lucruri de la sine.
Acesta ar trebui să facă în mod automat lucruri.
În Bash sau Korn shell, aveți posibilitatea să executați o comandă ca aceasta,
care va oferi atât o variabilă o valoare și de export-l la o comandă.
În coajă Bourne ei trebuie să fie comenzi separate, cum ar fi un export.
Aici este un alt aspect care este confuz.
Comanda set în C-shell definește variabile
și cu nici un argument vă spune ce valorile variabilelor sunt.
În Bash coajă, comanda set cu nici un argument face același lucru,
dar cu argumente face ceva cu totul diferit.
Deci, acestea sunt diferite argumente aici.
Unele dintre acestea sunt variabile de mediu, unele dintre ele sunt variabile coajă.
Toate acestea sunt variabile coajă adevărat. Unele dintre acestea sunt variabile de mediu.
Comanda set de argumente pot fi folosite pentru a opera
la parametrii pozitionali la un scenariu,
care este o modalitate de a obține-le pe toate dintr-o dată.
Noi nu putem merge într-adevăr în asta azi.
Acesta poate fi de asemenea utilizat pentru a modifica comportamentul coajă.
În special în Bash există variabile care vor determina modul în care se comportă coajă.
Apoi, de asemenea, doar aceasta o comandă pe care le-ar putea vedea, aceasta comanda.
Formateze urmate de variabile și tipuri de variabile este folosit în cochilii Korn și Bash.
Nu este obligatoriu, dar poate fi utilizată pentru a restricționa valorile variabilelor,
care poate fi util pentru a preveni erorile, și e destul de comun.
Așa că eu sunt doar de menționat faptul că, în cazul în care o vezi pe undeva.
Comanda unde.
Amintiți-am menționat mai devreme în cazul în care comanda la C-Shell,
care pot să vă spun locația de o cale de comandă.
Aici este substituire de comenzi.
Ar trebui să găsiți pe tastatură undeva un personaj care arata ca acest lucru.
Locația de pe tastatura se va varia.
L-am numit backquote. Este vorba despre dimensiunea de un citat.
Se merge de la stânga sus la dreapta jos.
Aici, pe tastatura mea Mac este în colțul din stânga sus.
Acest caracter poate fi utilizat pentru a executa o comandă într-o comandă.
Dacă aveți o expresie în interiorul backquotes,
că expresia este o comandă, a rulat.
Ieșirea de pe care comanda
este apoi înlocuită întreaga expresia backquote
în interiorul unei comenzi mai lung, care apoi se execută cu ieșire
ca parte din șir sale de argumente și așa mai departe.
Aici este o comanda care foloseste asta.
Să demonstreze funcționarea aici.
Să mergem pe aici, scoate backquotes.
De control A-mi ajunge la începutul liniei cu sintaxa de editare în Emacs.
Până în prezent, fiecare cale este ceea ce în cazul în care face,
dar atunci cand o fac asa, atunci se conectează în lista de cai de acces
în loc de această expresie backquote întreg și se execută ls-l pe ele.
Fel de convenabil, nu-i asa?
Deci asta e un lucru curat. Acesta este modul în care funcționează backquotes.
Acum, hai să mergem în jos un pic mai departe.
Acestea sunt pseudonime. Eu folosesc de fapt acestea.
Voi încerca să obțineți acest lucru în cu 1 operație de editare.
Bine.
Acum să vedem cum aceste definiții a ieșit.
alias LL Î-mi spui cum e definit.
Observați că e doar asta, dar citatele exterioare au fost luate de pe
și punctul de exclamare este scos.
! *, Lista completă a tuturor argumentelor.
Într-o definiție alias se va aplica din nou în cazul în care am folosi acest.
lwh KSH bash. Bine.
A se vedea modul în care funcționează? Mi-salvează niște dactilografiere.
Să mergem un pic doar pentru a menționa altceva aici.
Observați aici aceste scoici diferite. Eu ar trebui să am menționat acest lucru înainte.
Csh are un 2 aici și la fel / bin / tcsh.
Am putea stabili prin alte mijloace că acestea sunt de fapt același fișier.
Amintiți-vă spuneam, dacă tastați sh te bash.
Acest tip și veți obține acest lucru.
Dar cei care nu sunt legate. Cei care au cele singur acolo.
Și aceasta nu este genul de fișier care poate apela un alt unul.
Deci, acestea sunt fișiere separate, cele de C-shell sunt același fișier.
Înapoi aici, cealaltă aici, acest alias,
rețineți că conduce această comandă, fișier.
Că alias care execută. Fișier vă spune tipul de fișier.
Deci, FWH bash KSH. Bine.
Asta e ieșirea din fișierul de comandă.
Nu știu dacă știți ce înseamnă acest lucru aici,
Mach-O binar universal cu 2 arhitecturi.
Exista 2 tipuri de procesor posibile în Mac,
și unele programe au fost scrise pentru a fi capabil să ruleze cu ambele,
și comanda de fișier poate stabili că, pentru ca e ceea ce înseamnă acest lucru.
Ambele aceste dosare au fost scrise în acest fel.
Deci, vom vedea cum funcționează alias, vom vedea cum funcționează backquote,
vom vedea cum funcționează ls fișiere reale sau fișierul.
Acest lucru s-ar putea să nu funcționeze. Încercați "unde, unde" și "lwh unde". Bine, să încercăm asta.
în cazul în care.
în cazul în care este un shell built-in.
Amintiți-vă mai devreme am aratat ca Bash nu avea unde.
Dacă tastați în cazul în care în Bash coajă, primiți un mesaj de eroare.
Este doar o parte a carcasei, mai degrabă decât să fie o comandă separat.
Ce se întâmplă dacă tipul lwh în căutarea de unde? Vezi ce se întâmplă acolo.
Ran în cazul în care în cazul în care, luat această ieșire, și apoi a încercat să ruleze ls
ca l pe unde este un shell built-in.
în cazul în care este acolo, dar celelalte nu există.
Nici unul dintre acestea există, de fapt.
Astfel că nu funcționează întotdeauna, și se ilustrează, de asemenea, modul în care unele lucruri
nu fac destul de ceea ce s-ar putea fi crezut.
Să mergem în jos un pic mai departe de aici.
Asta de aici este în Bash. Care este, de asemenea, substituire de comenzi, cum ar fi backquote.
Dar, spre deosebire de backquote, se folosește acest stil variabilă.
Există o serie de expresii care încep cu un semn dolar,
și în timp ce acestea nu sunt variabile, ele împrumutat utilizarea semnului dolar
pentru a indica o expresie de un anumit tip.
Care poate fi înconjurat de paranteze sau paranteze sau paranteze duble,
care are un scop diferit.
Singur paranteze aici sunt o substituire de comenzi la fel ca backquotes.
Paranteze duble este de fapt o operație aritmetică.
Există și alte sintaxe, alte operațiuni.
Sintaxa Backquote este disponibil în Bash.
Cu toate acestea, aceasta este de preferat. Este mult mai ușor de citit și permite cuiburi.
Puteți avea în interiorul $ (comanda) o altă comandă,
ceva de genul -
Am obține o listă de acolo.
Asta ar funcționa dacă am avut backquote de asemenea.
Ce se întâmplă dacă vreau să fac ceva de genul -
Tu, probabil, nu s-ar folosi de fapt această comandă,
dar această substituire de comenzi interne ecouri numele toate fișierele care încep cu o,
apoi acesta se execută ls-l pe aceste fișiere,
și apoi aceasta ecouri doar de ieșire.
Probabil că nu ar face acest lucru, vei face doar ecoul sau LS,
dar acest lucru ilustrează modul în care funcționează cuiburi de comenzi.
Deci, doar o altă caracteristică aici.
Am menționat mai devreme, ca atunci cand ai unde în C-shell,
tip de lucrări în cojile de tip Bourne pentru localizarea comenzi.
Comenzi built-in, exact ceea ce spuneam acolo.
Comenzile sunt parte a carcasei, cum ar fi în cazul în care.
În cazul în care shell-ul executa o comandă cum ar fi ls, îl localizează pe calea,
consideră că este într-un director undeva,
citește că în memorie, creează un nou shell,
citește comanda ls sau orice altceva în coajă
în care variabilele de mediu sunt deja localizate,
și apoi se transferă execuție a acestuia.
Built-in comanda, codul de care comanda este în interiorul coajă,
astfel coajă doar începe executarea parte din propriul său cod.
în cazul în care o astfel de comandă. Este de fapt devine mai rapid.
Aceasta nu trebuie să citească nimic în memorie, este deja în memorie.
Comenzi built-in au întotdeauna prioritate față de comenzile cu același nume.
Comenzi care sunt în directoarele în calea poate avea același nume,
comenzi în diferite directoare, fișiere în diferite directoare.
Cea care are loc mai devreme în calea este cea pe care o vei primi.
Dacă există o comandă de built-in, ai luat mereu.
Nu există nici o modalitate de a da o prioritate mai mică decât o comandă în calea.
Dacă doriți să obțineți că comanda cale, aveți posibilitatea să tastați calea completă.
Dacă ar exista o comandă în care în calea undeva,
ai putea tip / bin / unde și te-ai prins.
Dacă nu doriți să tastați tot calea, ai putea defini un alias.
De fapt, dacă ți-a dat aliasul același nume ca și comanda built-in, acesta ar funcționa
deoarece definiția alias este evaluat
înainte de coajă stabilește că este o comandă încorporat în care ar trebui să fie executat.
Apoi, aceasta devine un pic mai complicat, cu unele comenzi aici.
Cazul unor comenzi sunt de fapt built-in comenzi și în calea.
Una dintre ele este ecou, ​​comanda am folosit în urmă cu puțin timp în aceste exemple.
Echo este o comandă în calea și este în fiecare coajă.
Ei nu neapărat toate se comportă în același mod.
Aceasta a fost inițial o comandă doar în calea.
A fost construit în a cochiliilor mai târziu.
Pentru că există opțiuni care depind de mediul înconjurător
și opțiunile de linie de comandă, comenzile built-in
au fost scrise pentru a funcționa la fel ca și comanda care fusese în cale,
este puțin probabil că ar fi fost scrise în acest fel
în cazul în care comanda nu a fost deja scris pentru calea.
Deci, acest lucru are efecte secundare. Istoria sa are efecte aici.
Există opțiuni de acolo.
Există, de asemenea, o opțiune definită de o variabilă în tcsh numit echo_style.
Asta-i una dintre aceste variabile care pot schimba modul în care ecoul lucrări.
Există și alte cazuri în care se poate atribui o variabilă
care schimbă modul în care operațiunea de coajă, inclusiv o comanda built-in, funcționează.
Aceasta nu ar afecta nimic altceva
din moment ce alte comenzi nu au acces la variabilele coajă,
doar variabilele de mediu.
Dar operațiunile de coajă pot citi variabile shell.
Că nu va lucra pentru csh. Asta e doar tcsh. Acesta este unul dintre îmbunătățiri.
Parsarea are secvențe atunci când evaluează metacaracterele,
atunci când se evaluează variabile, alias-uri, referințe de istorie.
Există o anumită secvență pentru aceste lucruri.
În cazul în care face lucrurile într-o anumită ordine
și ajunge la ceva care este o expresie a unui fel
care a fost deja evaluată, aceasta nu se va evalua din nou.
În cazul în care devine, atunci se va trece doar pe personaje.
Deci, dacă evaluarea unor expresii cum ar fi substituirea de comenzi
sau variabilă sau orice dă naștere unei expresii
pe care le-ar dori să fie evaluate,
care va funcționa numai dacă evaluarea are loc mai târziu, în secvența.
Sper ca am fost clar acolo.
Că secvența parsarea, o operațiune în C-shell,
nu este la fel de comenzi built-in, deoarece este pentru non-built-in comenzi.
Eu nu sunt sigur despre Bash acolo.
De exemplu, în cazul în care o variabilă shell produs o istorie de referință,
probabil că nu ar merge înapoi în istorie.
S-ar obține doar semn de exclamare.
De fapt, putem încerca doar asta chiar acum.
stabilit o = și vom avea pentru a pune acest acolo.
Oh, așteptați. Scuze. Am făcut acest lucru în bash. Am vrut să o fac aici.
A se vedea, așa că nu a evaluat că trimitere istorie
pentru că era deja trecut de punctul de evaluare a expresiilor de istorie
atunci când este evaluat variabila.
Deci, asta e un efect de parsare.
Și din nou, comenzi built-in nu se realizează în același mod.
Bine. Să mergem la următorul aici.
Acest lucru este destinat să fie o linie, dar este ceea ce face mai ușor de citit.
Ce face asta?
Poate vă aduceți aminte că putem evalua asteriscuri ca wildcard-uri nume de fișier,
și există alte metacaractere de fișiere, cum ar fi semnul de întrebare și expresii consolă.
Acest tip de evaluare se numeste expandarea.
stabilit noglob la începutul acestei comenzi spune, nu face asta.
noglob unset spune du-te înapoi la a face asta.
Rețineți că set glob nu ar avea acest efect.
În limbajul obișnuit, stabilit glob sau noglob unset ar părea să fie echivalent,
dar aici nu este. Este noglob unset.
Acum Tset. Tset stat pentru set terminale.
Nu este folosit, care de multe ori acum, dar înainte de sisteme de ferestre au devenit disponibile
si tu ai avut un singur terminal, s-ar putea avea pentru a determina tipul.
Și dacă ceva se apropia mai mult de un Ethernet sau de rețea,
ați putea dori să spun că este un VT100.
VT100 este un fel de un standard în afaceri terminale. Ea vine de la terminalul decembrie.
Daca faci doar dial-up - observați că? Aceasta merge înapoi un moduri, nu-i asa?
Deci, dacă ne-am face Tset aici,
dacă am face Tset, este resetarea terminalului meu, dar nu am văzut nimic.
Acesta nu a schimbat nimic.
-Uri
Bine.
TERMEN setenv xterm-color.
Știm deja că termenul a fost stabilit în acest fel, astfel încât nu s-au schimbat.
Acesta este modul în care am dori să o facă.
Dar observați că această comandă, Tset-uri, ieșire doar aceste comenzi. Nu le-a alerga.
Nu a rula aceste comenzi, le ieșire.
Deci, acest lucru este destinat să producă comenzi care vor fi rulate atunci.
Vă amintiți comanda în acest fișier doar am arătat ai avut un Q în ea.
Deci, haideți să facem asta.
Q suprima unele de ieșire, dar asta nu contează aici, după cum puteți vedea.
Eu fac doar ca să-ți arăt că nu a contat.
Acest lucru este în sintaxă backquote.
Notă backquote aici, backquote aici.
Am omițând aceste lucruri aici.
Acestea sunt cazuri de spunandu-i ce să facă
în cazul anumitor tipuri de terminale -
Ethernet, rețea, dial-up, ceea ce ai.
Nu contează aici, pentru că noi nu suntem de fapt face oricare dintre aceste lucruri.
Eu doar ilustrarea comanda.
Dacă am face acest lucru cu backquote, ceea ce am de gând pentru a obține?
De asemenea, observa aici că această inclus noglob set și noglob unset,
astfel încât cei care sunt acum disponibilizați în definiția.
Asta nu a fost întotdeauna adevărat, dar acum acestea sunt incluse în această comandă.
Dar să vedem ce se întâmplă dacă fac asta
și du-te la începutul liniei de control A și eu fac asta.
Bine, set: Command nu a fost găsit. Asta e un fel de ciudat, nu-i așa?
set este o comandă de bine-cunoscut. Este o parte a carcasei.
set: Command nu a fost găsit? De ce este asta?
Hmm. Ei bine, să ne gândim la asta.
Se execută o substituire de comenzi backquote,
și care are loc la o anumită parte a secvenței de parsarea comanda.
set este o comandă built-in.
Deci, de data aceasta nu ca substituire de comenzi,
este deja ajuns dincolo de punctul de a identifica comenzi built-in.
Deci, se tratează stabilit ca în cazul în care ar fi o comandă în calea.
Inutil să spun, că nu-l găsiți și veți obține o eroare.
Bine. Există un exemplu de secvență parsing.
Și ce facem cu asta?
Observați această comandă foarte interesant aici, eval.
Mă întreb ce face asta.
Dacă te uiți la manual - și hai să facem asta
pentru a arăta cât de confuz aceste manuale sunt -
om tcsh, manual confuz, găsirea de lucruri aici, nu este ușor, fie.
Aici vom merge, eval arg, astfel încât să putem avea 1 sau mai multe argumente
și există o listă de lucruri acolo.
Tratează argumentele ca date de intrare pentru shell
și execută comenzile care rezultă în contextul shell-ului curent.
Aceasta este de obicei folosit pentru a executa comenzi generate ca rezultat al comenzii
sau substituție variabilă, deoarece parsing are loc înainte de aceste înlocuiri.
Foarte bine.
Și aici se referă chiar la comanda Tset pentru o utilizare eșantion
ca cel tocmai v-am arătat.
Acum trebuie să mă fereastra din spate la un loc util.
Hai vino aici și vom vedea că eval este folosită chiar înainte de asta.
Deci, haideți să vedem ce se întâmplă dacă am pus - aici vom merge cu săgețile la care comanda
și control A la început, eval.
Bine, așa că funcționează.
Când faci eval, este nevoie de ceea ce vine după ea și face o comandă.
Acest lucru vă permite să-l analiza în esență de două ori.
Secțiunea aici conduce această comandă în interiorul backquotes,
devine de ieșire.
De ieșire ar trebui să fi rulat ca aceste comenzi aici ca acestea
la acesta și acesta.
Deci, aceste comenzi sunt acum aici, în această ordine,
dar acestea sunt built-in comenzi și nu le pot obține imediat.
Deci, mergem la eval, eval ponturi asta, incepe peste tot din nou totul, și funcționează.
Un exemplu atât de backquoting, eval, parsing, consecințele parsing,
și o comandă care este, probabil, de utilizare foarte puțin pentru tine în zilele noastre.
Bine. În regulă, umask.
Să ne uităm la această comandă aici, umask 022. Mă întreb ce face asta.
Să tip umask cu nimic după el. 22. Bine.
022 și o facem din nou.
După cum ați ghicit, umask cu nici un argument ce spune masca curent;
umask cu argumente face asta, dar asta a fost cea pe care am avut deja.
Ce înseamnă 022 înseamnă?
Acestea sunt aici protecțiile pentru un fișier.
Ele determină care este permis să citească sau să scrie sau executa fisierul.
Protecție sunt, de asemenea, numite permisiuni.
R standuri pentru citire, W pentru scriere,
și x, care nu este prezent acolo, reprezintă executa.
Exista 3 categorii de acolo.
Ultimele 3 elemente sunt în categoria de utilizatori. Cei care se aplică la mine, utilizatorul.
Aceste 3 aici se aplică la grup.
Fișierul aparține un grup, utilizator poate apartine mai multor grupuri,
dar în cazul în care utilizatorul este în grupul din care face parte acest fișier,
atunci aceste protecții se va aplica la el dacă nu-i utilizatorului.
Și aceasta este oricine altcineva.
Aceste categorii se exclud reciproc.
Utilizatorul protecție se aplică la el,
protecțiile de grup se aplică membrilor grupului, altele decât utilizatorul,
și alte protecțiile se aplică numai la altele decât utilizatorii și membrii grupului de persoane.
Dacă există un r sau aw sau un x, înseamnă că se acordă protecție.
Dacă există o cratimă, inseamna ca nu este.
Există de fapt, sunt alte lucruri care pot fi puse aici în afară de acestea,
care nu va primi în acum.
Umask definește o valoare implicită pentru fișierele pe care le creați.
Și, ca o mască, de fapt se spune de biți pe care nu le stabilit.
Cum a devenit acest biți?
Dacă credeți că de fiecare dintre ele ca un număr octal,
aceasta este bitul de 1s, aceasta este 2s, aceasta este 4s.
Deci, de la 0 la 7
va descrie ceea ce combinație de R, w, iar x pe care le au pentru aceste 3
și apoi un număr similar de acestea și apoi pentru acestea.
Deci 022 0 înseamnă pentru altul, 2 pentru grup, 2 pentru utilizator.
Dar aceasta este o mască. Masca este ceea ce nu ai.
Îmi pare rău. Tocmai ți-am dat lucrurile în ordine greșită.
Este prima 3. Acestea 3 sunt utilizator, acestea 3 sunt grupul, acestea sunt 3 cealaltă.
Îmi pare rău că ți-a dat astea în ordine greșită.
0, care este primul de cei care, nu se afișează valoarea,
dar în cazul în care un număr nu este acolo, e un 0.
Asta înseamnă că toate 3 din acestea ar fi permis.
Observați că, în această special, una x nu este permisă.
Motivul este că învelișul este capabil de a determina
dacă un fișier ar trebui să fie executat sau nu.
Din moment ce acest lucru nu este un fișier executabil, nu a stabilit x.
Cele două mijloacele pe care scrie permisiune, a doua categorie de aici,
cel din mijloc, este refuzat.
Deci, din nou, acestea sunt lucrurile pe care ea a negat.
Ei bine, x este permis, dar nu e aici, pentru că nu este executabil
și în mod similar pentru ceilalți.
Așa că e un umask comun.
Un alt unul comun este de 700 - da-te tot și nimeni altcineva nimic.
Și mai există și alte posibilități.
Mă voi întoarce la asta. Utilizarea istoria pot căuta înapoi pentru că, lwh de acolo.
Bine. Deci, aici, acestea sunt cojile.
Bash, proprietarul, care este cont de sistem, poate face totul.
Grup și toată lumea poate face citi sau de a executa, dar nu scrie.
Acesta nici măcar nu permite proprietarului de a scrie la ea.
În cazul în care proprietarul a vrut să scrie pentru el, contul de sistem,
el ar trebui să se schimbe de protecție prima.
Dar, din nou, umask setează implicit de mascare aceasta,
indicând biți care nu vor fi setate.
Aceasta este de obicei într-unul dintre fișierele de inițializare, care este. Cshrc pentru C-shell
sau profilul. pentru cojile de tip Bourne.
Acesta poate fi, de asemenea, în altă parte, în prezența altor fișiere de inițializare din sistem.
Oricum, asta este umask.
E ceva cam ciudat aici,
și că este, de ce există o singură comandă pentru asta?
Dacă aș fi scris acest lucru, mi-ar face o variabilă, umask = o valoare face.
De ce există un întreg comanda doar pentru acest scop?
Motivul este acesta doar se întoarce la originile Unix.
Unix a fost doar un proiect de programare la Bell Labs la începutul anilor 1970.
Oamenii pur și simplu s-au reunit pentru a programului.
Ei nu a intenționat niciodată să devină un sistem de operare la nivel mondial.
Diferite persoane au scris diferite părți fără să mă gândesc foarte mult
de modul în care acestea urmau să fie folosite - destul de vag.
Și a venit împreună ca asta, și e tot așa în anumite privințe.
Deci, care reflectă istoria, și există încă aceste neconcordanțe și elemente ciudate ale acestuia.
Bine. Un viitor aici.
Așa cum am scris mai devreme, C-shell-ul nu este într-adevăr folosit foarte mult pentru programare,
deși poate fi.
Se execută mai lent, din nou, compromisul între utilizarea interactiv,
care are mai mult de prelucrare a implicat decât viteza,
care se poate face fără prelucrare.
Caracteristici suplimentare adăugate la shell Bourne de Korn și Bourne, din nou cojile
nu par să-i încetinească, și nu știu de ce, care este.
Acesta ar putea fi doar de programare mai bine, dar eu nu sunt în măsură să știe.
Viteza de aici, de fapt, nu este o astfel de afacere mare, deși este menționat.
Motivul este că script-uri shell obține de fapt, destul de repede.
În cazul în care există o mulțime de comenzi, cum ar fi într-un program calculațional,
probabil nu l-ar face într-un script de shell.
Operațiunile sunt destul de simplă și directă.
Cele pe care le-am experimentat, care sunt prea lente
implica cereri repetate de comenzi lent.
Mai devreme am menționat editorul flux sed. Care comanda este lent.
Dacă executați de multe ori SED, veți obține un script lent, dar nu e coajă care este lent.
Rularea l în coajă Bourne nu va fi mult mai rapid decât se execută în C-shell,
deși nu există, poate, unele avantaje acolo.
Capacitățile de programare suplimentare, pe de altă parte,
sunt motive importante de ce le-ar folosi cojile de tip Bourne.
C-shell are caracteristici ciudate să-l -
faptul că nu știu dacă o variabilă este o variabilă de shell sau o variabilă de mediu.
Ea poate fi foarte confuz.
Nu e atât de ușor de a scrie
doar pe baza experienței dumneavoastră de programare în alte limbi.
Cred că puteți găsi cochilii de tip Bourne mai mult în concordanță cu experiența dumneavoastră.
Unele script-uri, deși, poate fi de mii de linii în lungime.
Cei care le-am văzut sunt utilizate pentru patching sisteme de operare.
Cei care pot executa foarte lent, dar nu a alerga cei foarte des.
Este doar atunci când faci patch-uri,
și este doar administratorul de sistem care face aceste lucruri,
deci nu este într-adevăr mult de o problemă.
Cei care sunt de sute de linii de mult timp, de fapt executa destul de repede.
Menționat acest lucru de aici, care sunt aceste îmbunătățiri?
Am menționat deja câteva dintre ele - tablouri, calcule,
de $ () expresie pentru calcule în Bash coajă,
alt tip de substituire de comenzi.
Există diferite tipuri de comenzi de testare
prin care se poate face teste condiționată de existența unui fișier sau a altor lucruri.
Dura aici, această comandă aici.
Ce face acest lucru face, și de ce ar folosi cineva?
nume_variabila printenv.
Noi știm ce printenv face. Ea ne spune valoarea unei variabile.
Și nume_variabila printenv nu ne va spune foarte mult, deoarece nu există nici un astfel de variabile.
Blank.
Dar hai sa dau ceva semnificativ.
Asta nu e nici acolo. Bine. Cred că nu m-am definit ca.
Să verificăm doar mediul meu.
Aceasta este o altă comandă prin care puteți inspecta mediul.
Nu este bun EDITOR vechi, cea pe care am văzut înainte.
Ce face asta?
Aici avem o expresie backquote.
Amintiți-vă acest lucru este C-shell.
Astfel EDITOR printenv ne va da o valoare de EDITOR. Este vi.
Și apoi se va stabili ca valoarea variabilei o, comanda set.
Deci, acum, dacă am face echo $ o, mă vi.
Nu mi se pare teribil de util.
Cu toate acestea, de fapt, are un scop.
Din moment ce nu știm dacă o variabilă este o variabilă de shell sau o variabilă de mediu
folosind sintaxa evaluare semnul dolar, putem folosi printenv
pentru a vă asigura că aceasta este o variabilă de mediu.
Deci, dacă ar exista un editor de variabila de shell, acest lucru nu ar fi ajuns ea.
Aceasta funcționează numai cu variabila de mediu.
Dacă ar exista o variabila de shell și am vrut valoarea sa,
Mi-ar trebui să găsească o altă cale de a face acest lucru.
O modalitate de a face acest lucru ar fi de a face set și conducte.
Aceasta este una dintre metacaracterele, caractere speciale.
Acesta trimite ieșirea de set la altceva.
Să vedem ce am putea găsi acolo.
Nimic. Bine. Să vedem ce e acolo tot împreună.
Acesta a fost echo_style, cea pe care am menționat mai înainte. Bine, hai să facem asta.
Amintiți-am menționat mai înainte, echo_style
determină modul în care comanda echo va rula.
BSD vine de la Berkeley Standard Distribution.
Acesta este Berkeley Unix din anii 1970.
Acesta este unul din modurile în care ecou poate rula.
Setarea echo_style la această valoare în TC-shell va provoca ecou să se comporte în acest fel.
Astfel stabilit face asta, dar stabilit devine doar variabilele de shell.
Nu ar găsi EDITOR, care nu este o variabilă shell.
Nimic.
Deci asta e un mod de a le distinge.
Dar faptul că va trebui să treacă printr-o parte de comandă ciudat de genul asta
să se facă distincția între variabile coajă sau variabile de mediu
arată tipul de natura nepractică din C-shell pentru anumite scopuri.
Iar acum, ultimul și poate cel mai puțin, aceasta este paginile de manual.
Cei de care s-ar putea cunoaște, omul este pe termen scurt pentru comanda manual.
Paginile de manual pentru cojile sunt greu de citit. Sunt foarte mult timp.
Sunt organizate într-un mod care ar putea face dificil de a găsi ceea ce căutați pentru.
Deci, dacă sunteți în căutarea pentru ceva cu un scop,
poate nu știți dacă acest scop este o variabila de shell sau altceva,
astfel încât s-ar putea să nu știți unde să-l caute.
Poti sa te uiti pentru diferite siruri de caractere, dar siruri de caractere sunt de multe ori repetate.
Asa ca este, în general, greu de citit.
Tocmai ne-am uitat la pagina de om TC-shell un pic înainte de a găsi comanda eval.
Unele lucruri merg mai repede.
O abordare este de a căuta un șir.
Puteți folosi pagerul.
Pager are slash pentru a căuta o comandă sau un șir de caractere în interiorul unei operațiuni de pager.
Om în mod implicit se vor folosi pagere, fie mult sau mai puțin.
Nu știu dacă ești familiarizat cu acestea, dar cei care pot demonstra fișiere puțin câte puțin.
Am fost folosind mai puțin pentru a afișa aceste fișiere speciale care le-am primit aici.
Puteți căuta în interior.
Puteți încerca, folosind diferite siruri de caractere de căutare.
De asemenea, paginile de om în diferite sisteme de operare nu poate fi la fel.
Acestea pot fi pagini separate pentru csh și tcsh.
Ei nu sunt pe Mac, dar acestea ar putea fi în cazul în care acestea sunt comenzi separate.
Dacă sh nu suna într-adevăr Bash, exista, probabil, ar fi o pagină separată om.
Unele sisteme au pagini separate om doar pentru C-shell comenzi built-in.
Uneori, dacă doriți să citiți o descriere a unei comenzi built-in
care este, de asemenea, în calea, ca ecou, ​​va trebui să citiți pagina de manual pe care comanda pe ecou
pentru a determina modul în care va funcționa ca o comanda built-in
chiar dacă nu sunteți de asteptare comanda built-in.
Acesta este un dezavantaj al sistemului de operare, în general, nu numai pentru scoici,
deși pentru cojile în special paginile man sunt destul de lungi,
în parte pentru că au adăugat caracteristici utile pentru ei, care poate fi un pozitiv.
Bine. Sunt întrebări? Orice subiecte pe care doriți să aduc?
Ceva relevant aici?
Ei bine, a fost foarte frumos să vorbesc cu tine toate.
Sper că ai ceva de acest seminar
, care va fi util pentru tine în eforturile dumneavoastră viitoare.
[CS50.TV]