[Семинар - Unix черупки, среди] [Douglas Kline - Harvard University] [Това е CS50. - CS50.TV] Днешната тема е черупката Unix. Аз съм Douglas Kline, експерт, или поне разумно компетентен потребител, на черупката. A черупка е интерфейс за потребителя да се операционната система на компютъра. Името е подвеждащо, тъй като, за разлика от черупката на животното, което е трудно и защитно, черупката на компютъра дава възможност за комуникация. Така пореста мембрана, вероятно би било по-добре метафора. Оригиналният черупката за Unix е обвивката Bourne. Bourne е написан B-O-U-R-N-E. Борн е един от най-оригиналните автори на Unix, и така черупката е кръстен на него. Името на тази черупка като команда е просто ш. Това е командата, която може да изпълни. Черупката започва от влизане. Когато влезете в компютъра, черупката просто започва да работи за вас, и това е, което отнема вашите команди. Тя може да започне в други моменти също. Ако ви отведе до един прозорец с никоя друга индикация, че ще започне черупка за вас. Ето как тя е, че можете да отидете до прозореца и да започнете да пишете команди и така нататък там, въпреки че не сте влезте в този прозорец. В допълнение, ако го направите отдалечено влизане, След това той ще започне черупка на отдалечения компютър. И това е възможно да се изпълнява команди без интерактивна обвивка. Това може да означава в рамките на текущата си работа, и то също може да означава дистанционно управление. Можете да изпратите команда към друг компютър, който включва стартиране на черупката там. В действителност, тя трябва да включва стартиране на черупката има дори ако това не е крайната си цел. Когато нещо се стартира по този начин, то не е задължително да започнете нова черупка. Ако ви донесе нов прозорец, че е възможно да го кажа, за да доведе до редактор или някаква друга команда. В този случай, редакторът ще започне от нулата. Когато редакторът завърши, прозорецът свършва. Това е малко необичайно, но това може да бъде направено. В тези случаи, тя няма да бъде черупка. Така че това не е задължително вярно, че един прозорец или някакъв такъв иск ще доведе до една черупка. Shell прави разбор команди. Разбор означава идентифициране на различните елементи и ги класира. В рамките на една команда, пълна низ, който въвеждате, ще има една или повече единични команди да бъдат екзекутирани. Други елементи могат да бъдат аргументи. Може да има и специални символи, които засягат изпълнението на команда. Те могат да изпращат на изхода някъде, различна от екрана ако командата обикновено ще го изпрати на екрана. Тя може да пренасочи вход; той може да направи други неща също. Има различни други символи, знаци, и така нататък. Разбор включва откриване и тълкуване на тези неща. Сега, ако няма повече въпроси, което е доста вероятно, тъй като там не са повече хора, ние ще отидем към следващата ми страница тук. По-рано казах, че Bourne обвивката е първоначалната черупката. Има и други. Един от тях е С-обвивката. Командата е CSH. Името C-черупката е просто игра на думи. Тази черупка е въведена с Berkeley Unix в средата на 1970-те години. Berkeley Unix е семенната събитие в развитието на Unix. Това беше огромна революция и включва въвеждането на тази черупка. Причината за тази игра на думи, C-черупка, е, че C-обвивката има някои характеристики в него, които приличат на езика C, които Bourne обвивка не трябва - или тя не е имала по това време. Има също така и TC-черупката. Това е суперкомплект на С-обвивката. Той има допълнителни функции, много от които са полезни за интерактивна употреба като припомня команди в механизма на историята, което аз ще опиша малко по-късно - по прост начин, моделирани след редактор. Тя също има автомати, които ви позволяват да се обвърже ключов стринг кратък, за да по-дълъг команда. Ние няма да бъдат намалени в това днес. Тя има някои функции, които са полезни за програмиране. Въпреки това, C-черупката не често се използва за обвивка програмиране. Програми Shell, ако вече не знаех, са програми, които се състоят от характеристики черупки. Можете да пуснете тези като програми. Пишеш един куп черупки команди в един файл и да изпълни файла. Не е нужно да го компилирате. Това е интерпретативна език. Фраза C-обвивка сега е неясна, тъй като тя може да се отнася само за първоначалния C-черупка, CSH, или за всички C-черупки, включително tcsh. Това е малко неясно. А по-късно черупка е Korn обвивката, KSH, кръстен на програмиста, Korn. Тази обвивка се опитва да се включи в една черупка предимствата на C-черупката за интерактивно ползване и на Борн плащам за програмиране. Тя е била използвана като интерактивна обвивка от някои хора - малцинство. По-късно обаче, е имало и друг въведение, черупката на Bash, БАШ, отново игра на думи, Bourne-отново плащам. Това е разширение на обвивката Bourne. Korn черупки също. Двете от тях са. Той има същите цели на Korn обвивката на обединяваща на C-обвивката и предимства Bourne Shell в една черупка. Много от подобренията на обвивката Korn също са включени в Bash. Bash, обаче, има повече и следователно е за предпочитане. The Bourne-отново черупката и обвивката Korn се наричат ​​черупки Bourne тип защото те включват характеристики на Bourne шел интерпретатора, които са несъвместими в някои отношения с C-черупки. Има и други черупки, освен тези, някои предназначени за ограничена употреба, може би ограничено до някои команди, може би специализирани цели, не често използвани. Добре. Следваща точка тук. Баш черупката е свързал с различни форми на Linux. Аз не съм сигурен дали това е вярно за всяка форма. Има много форми там и не съм ги използва, но в тези, които съм използвал е станало, свързани с него. Така че, доколкото знам, няма нищо за Bash което го прави повече съвместим с Linux от всяка друга комбинация от черупки и операционната система. Мисля, че това най-вероятно просто отразява наклоните на програмистите. Че то е станало, свързана с Linux е още една причина да се предпочитат Bash да KSH тъй като нещата са склонни да се пише в него и това е вероятно да се разпространи. Ще ви дам и други причини за това по-късно. Bourne шел скриптове трябва да се изпълняват под черупката Korn или Bash. Ако напиша нещо за обвивката Bourne, най-вероятно може да го изпълни под KSH или Баш. Korn шел скриптове вероятно ще се изпълняват под Bash, но не мога да гарантирам това. По-късно тук, C-шел скриптове трябва да се изпълняват под TC-черупката. The C-черупката всъщност никога не е бил широко използван за скриптове тъй като на Борн плащам и по-късно черупки Bourne тип са предпочитани за тази цел. Така че наистина не е толкова важно. Има доста Bourne шел скриптове, които са написани много отдавна, преди черупката Korn или Bourne-отново черупката бяха въведени. Тези, които все още са в употреба, част от операционните системи, и така вие ще ги намерите, ако се вгледате в операционната система или някои стари програмни пакети. Bash е до известна степен се превръща в нещо като лингва франка за операционни системи. Той вече е бил удължен до Windows и да VMS. VMS, в случай, че не знаете, е патентована операционна система на Digital Equipment Corporation, която е все още в употреба, най-вече зад кулисите. И ако това ще се работи по няколко различни операционни системи, вероятно хората са склонни да се смени за него. Но това развитие е сравнително отскоро. Това е само началото, така че не може да предскаже дали това ще се окаже, че наистина е такава лингва франка. Също така, тъй като файлови пътища и файлове и библиотеки се различават между тези различни операционни системи, Вие може да не е в състояние да напише Bash скрипт на една операционна система и след това да го изпълните на друг един. Би трябвало да можете да го преместите между различни Unix, Linux Mac OS операционни системи, но не е задължително да Windows или VMS. Може да се наложи да промените описания файл ПЪТят, и някои библиотеки могат да бъдат различни, които могат да повлияят на начина, по който някои команди работят или как те обработват аргументи и други подобни. В допълнение към това, друг повишено внимание тук е, че няма гаранция, че всички различни черупки, които споменах - Bourne Shell, C-черупка, TC-черупки, Korn черупки, Bourne-отново плащам - ще бъде на разположение по всяко Unix или Linux или Mac OS на компютъра. Те просто не може да има. Това е едно от предупрежденията тук. Това е жалко ограничение тук, тъй като искате нещата да работят навсякъде, но за съжаление, не можете да разчитате на това. Добре. Следваща един тук. Да кажем, че искате да напишете скрипт, програма, състояща се от обвивката команди. Вие пишете вашите команди, сложете ги във файл, и изпълни файла. Какво става, ако искате да включите аргументи? В случай на операции черупки, аргументи се наричат ​​параметри или позиционни параметри и те ще се наречеш с знака за долар и цифра, $ 1, $ 2. Така че, ако скриптът е това име, първата ми аргумент може да бъде аргумент 1 и вторият ми може да е аргумент 2, и в моя скрипт, ако искам да се позове на тези неща - нека да изтрие това, тъй като аз не съм наистина ще го изпълним - в моя скрипт може да имам $ 1 се отнасят до arg1, $ 2, който ще излезе по този начин, arg2. Така че тези символи са на разположение да се позова на аргументи, и тези, които се прилагат за всички от черупките. В допълнение, има и други символи. $ * Се отнася до целия списък аргумент, всички от тях. $ # Се отнася до броя на аргументи. Отново, това се отнася за всички черупките. Тези символи, * и #, могат да бъдат използвани с тези значения в други места също. Ние няма да влезем в това. Shell спецификатор линия. Какво е това? Да речем, че съм писал сценария и това е за определена черупка и искате да го стартирате. Откъде знаеш какво плащам вашата операционна система ще използвате, за да управлявате вашия скрипт? В един момент може да се предположи, че ще го изпълним в обвивката Bourne ако не съм казал друго, но хората не пишат скриптове в Борн обвивка, която много повече а вие дори не може да се позове на това вече. Така че тук имаме една черупка спецификатор линия точно тук. Това определя Bash. Имайте предвид, че в него се посочва в името на пътя, / BIN / Bash. Ако даден компютър има черупка Bash но не в директорията бен, / BIN, това няма да работи. Това е друг квалификант, друг повишено внимание тук. Знакът за килограм е символ на линия за коментар. Това се отнася до всички черупки. В конкретния случай тук, #! в началото на скрипта, е специален случай. Това определя черупката, в която да стартирате скрипта. Както казах, той не може да бъде същото място / BIN. В допълнение, има и още нещо тук. Ако просто използвайте знака паунд с няма възклицателен знак и името на пътя, че трябва да се посочи на C-черупка. Въпреки това, аз не ви съветваме да правите това, защото аз не съм в състояние да гарантира , че винаги ще работи. Ако искате C-черупка, че би било по-добре да се каже така. Тогава там е нещо доста объркващо тук. Ако използвате една черупка спецификатор линия като / BIN / Bash и че черупката не е на разположение там, няма такова нещо като / BIN / Баш на този конкретен компютър, или защото не разполага с Bash или защото е на различно място, вие ще получите съобщение за грешка ви казвам, че скриптът сте стартирали не съществува. И разбира се, съществува си скрипт, така че съобщението за грешка е объркващо. Причината, че операционната система, която дава тази грешка или, по-точно, че си интерактивна обвивка, в която се работи това дава тази грешка, е, че той съобщава, командата, която се използва, което е името на скрипта. Тази команда ефективно нарича черупката от името на скрипта. Това е мястото, където можете да получите, че е объркващо съобщение за грешка. Друг начин да се обадя на скрипт е чрез определяне на черупката на командния ред, както е тук. Това е заповед. Това казва тече Bash и след това пуснете ми скрипт в Bash. Това ще има предимство пред един спецификатор на линия, и това има функция на което ви позволява да се предвидят различни пътища и файлове. Ако просто се даде команда, операционната система ще се търси тази команда на различни места. Ако е на разположение, тя трябва да го намерим. Компютърът ще намерите Bash Където и да го намира и го стартирате, така че не е необходимо след това да се притеснявате за това къде той се намира. Има възможност за други притеснения тук, тъй като, ако има повече от една версия на Bash, което е възможно, макар и малко вероятно. Така че това е още един начин да се справят с тези неща. Спецификатор линии могат да се обаждат всяка черупка. Те могат също така да поиска други неща, освен черупки. Примери, които имам тук са SED, която е редактор поток; AWK, който е език за обработка на модел; и Perl, много силно развита скриптов език. Ако сложите спецификатор, показващ една от тези програми, в началото, тя ще отиде директно в тази програма, а не като се започне една черупка. Тези програми имат лимити на своите способности. Perl е много способен. Sed е редактор. Той може да направи неща отвъд просто редактиране. Но тя може да бъде трудно да се програмира това. В допълнение, минавайки аргументи и неща, които да скрипт е или невъзможно, или объркваща. Така че в тези случаи, с AWK или СЕД, това е, поне в моя опит, предпочитане да напиша сценарий и разговор черупка AWK или СЕД от шелскрипт по-скоро, отколкото да поставят AWK или СЕД като скрипт спецификатор линия. Perl е силно диверсифициран език, както казах. Вие не можете да стартирате интерактивни команди в Perl, което означава, че не можете да тествате части на скриптове, които сте развиващите от тях работи интерактивно. Все пак, това е един изключително способен език и се превърна в един много широко използван инструмент. Това е само малка част от една скоба забележка за спецификатор линии. Във всички или повечето форми на Linux - отново, не мога да бъда сигурен, че е всичко - и в Mac OS, ако въведете CSH получите tcsh, и ако въведете ш получите Баш. Те се опитваха там, за да ви даде по-напреднали версии на тези черупки, но това може да бъде объркващо. Ако ти напиша скрипт използва tcsh или Bash разполага същевременно призовава CSH или SH и след това се опитайте да го стартирате на компютър, който не разполага с tcsh или Bash, вие може да получите някои грешки, ако има команди там които тези снаряди не признават. В допълнение, може да се обади на вашия черупка на локалния ви компютър наричайки го като SH или CSH и след това да получите по-напредналите черупките. Вие дори не може да се мисли за това, че сте с помощта на по-напреднали черупката. Така че това е потенциален капан. Как е установено, че ако въведете ш получите Bash, ако въведете CSH получите tsch? Има неща в тези компютри, наречени връзки който може да се свърже с имената на файловете да се позове на едно и също нещо. Тя може да бъде или две имена за един и същи файл или файл, чиято цел е да се обърнете към друг файл. Те се наричат ​​твърди и символни връзки. Ние няма да навлизаме в това повече днес. Може да има и отделни файлове - един файл SH, един файл Bash - но и двамата тече Bash. Тогава там е друг квалификант тук. Ако звъните един от тези черупки от едно име, може би си мислите, че ще получите същата функционалност, както го нарече с друго име. Е, това всъщност не е непременно вярно. Тези команди могат да разглеждат името, с което те са били наричани и те могат, въз основа на това име, се държат по различен начин. Може да има проблеми, се опитва да съответстват на стандарт. Някои от вас може би са чували за друг стандарт POSIX или, може би и други функции. Това може да бъде избран понякога с аргументи от командния ред или чрез създаване на фиктивни променливи. Наричайки като од или Баш всъщност може да доведе до различно изпълнение дори ако това е един и същи файл, че сте се изпълнява. Друго нещо е да се помисли, че дори ако друг компютър има tcsh или Bash, ако те не са свързани, тъй като те са на локалния ви компютър ако имате локален компютър Linux или Mac OS, след това отново ще получите черупката, че ти се обадя SH или CSH, а не този, който може би ще предпочетете. Сегашната Bourne обвивката има подобрения, по-малка от тези в Bash но покрай тези в оригиналната Борн черупката. В резултат на това, дори текущата Bourne обвивка, SH, дори когато това не е Bash, прилича повече на C език от C-обвивката прави. Това не е вярно, когато С-обвивка е създадена, но е разработена по този начин. Може да забележите, че тук всички тези имена черупки с изключение на обвивката Bourne има нещо, което да посочи коя черупка са те - CSH, Баш - но на Bourne обвивка е само ш. Защо? Това беше първоначалната черупката. Това беше черупката след това, не е черупка, и тъй като това е черупката, не е имало причина да се разграничи от друга черупка. Така че това е защо тя е, че името и все още го прави. Този най тук е линия от база данни парола за сметка имам там на друг компютър. Отивам да се опита да получи това име, така че можете да видите, че част в края, черупката. Базата данни на парола притежава характеристиките за вход за всички потребители. В началото е потребителското име, което можете да видите последните две букви на мой сега. Полетата, тук са разделени от двоеточие. В последното поле, както можете да видите, е бин / tcsh, черупката. Това е спецификатор на черупката. Има нещо интересно тук. Когато Unix първи път е разработена, имаше само една черупка, така че нямаше избор там. Така че защо те позволяват на поле в базата данни на парола, за да се уточни черупка? Аз не знам, но това е късмет, че те го направиха. Това е доста трудно да се правят промени в формата на база данни парола защото много програми препращат към формат и ще трябва да бъде пренаписана. Това е удачен или случайно развитие, че те са включени тази област. Този вид на файл с пароли линия се използва за всички Unix и Linux компютри, доколкото аз знам. The Mac има своя собствена система. То всъщност има парола на файла с линиите в този формат, но това не е мястото, където са определени характеристики на потребителя. Друга забележка вмъкнат там. Ако звъните черупка, можете да го наречете като под-обвивка от съществуващите си черупки. Така че, ако отидете тук, нека се отървем от тези неща. Тук съм в C-черупката. Тази променлива, която точно да идентифицира черупката си, всъщност не винаги е надежден начин за определяне на това какво плащам бягаш, но в този случай това е така. Ами ако просто напишете - Сега съм в Bash. Някои неща ще бъдат едни и същи. Това ли ми казва, моите команди. Ако аз правя спре Обратно към моята C-черупка, LS, същото. Нали така? еж, на преден план, обратно към моя Баш черупка. хората с увреждания, текущата директория, обратно към C-черупката. хората с увреждания, друга директория - всъщност не е друга директория в този случай. Това е една и съща директория. Да кажем, че искате да се обадите на команда тук: къде ли. Какво означава, че правя? Тя ми казва къде да овладеят LS, този, който ми дава директория на фирма, се намира в LS. Нека се върнем към Баш черупка. Нека се опитаме същото нещо. Хм, интересно там, където: команда не е намерено. Защо е това? The където командата е вграден в C-черупката. Това не е команда, която трябва да се чете в памет на от някъде другаде и екзекутиран. The C-черупката тя работи чрез прехвърляне на изпълнението на част от своя собствен код и това не е в Bash черупката. Така Bash, без да има такава вградена команда, изглежда за него, не го намери, и ние получите съобщение за грешка. Така че ние имаме Bash черупка движещ се под C-черупка, и ние наричаме това под-обвивка. И само в случай, че сте любопитни, Bash черупка има свой собствен начин на търсене на команди. хашираната се отнася до факта, че може да се изпълни по-бързо, като се намери по-бързо. Това е едно от подобренията, вградени в някои от тези черупки. Черупки Bourne тип са предпочитани за програмиране. Те имат контролни структури като цикли, условни конструкции, вида на команди, които можете да използвате в програмните езици като C или какъвто и език. Може би сте програмиране в Java или нещо такова. Черупките са тези, прекалено. Обвивки Bourne тип, особено Bash, имат повече и те са предназначени по-голяма гъвкавост. The Bash черупката има масиви. Оригиналният Bourne обвивката не е така. Така че може да бъде значително по-изгодна за програмиране. The C-черупката всъщност наистина има масиви, но не разполага с много от тези други функции. Обвивки Bourne тип ще изпълни по-бързо ако те не разполагат с функции, предназначени за интерактивна употреба. Зареждате нещата за една цел, това ги зарежда надолу и с друга цел. Налице е, че компромис там. Тези характеристики, които са предназначени за използване интерактивен наистина са на малка или никаква полза за скриптове. Това е възможно да се използва интерактивен под-обвивка точно като тази, която започна там да тествате команди, които възнамерявате да използвате в скрипт. Това е, което не можеш да направиш с Perl. Можете да го направите с черупките. Дори структури като за електрически вериги и т.н. могат да бъдат стартирани интерактивно. Те са понякога е полезно да се работи интерактивно но по-вероятно е, че ги използвате, за да се разработи сценарий. Псевдоними. Това ще бъде за C-черупката. История механизъм, където можете да се върнат на предишните команди или части от тях, че вече сте се изпълнява. Отново за C-обвивката, обвивката Bourne и Korn обвивката имат тези неща, но аз няма да отида в тях. Така че тук са някои полезни псевдоними, които имам. Вместо да въвеждате ли - това е обща команда - Просто въведете л и да си спестите един характер. LS с различни опции, всички онези работа. Имайте предвид, че тези определения са кавички около тях. В тези случаи, кавичките не са необходими. Ако можете да определите тези псевдоними без кавичките, тя все още ще работи. Те са препоръчителни. Има ситуации, в които не можете да използвате цитата защото искате да се случи нещо, което цитатът ще предотврати. Понякога можете да цитирам част от определението, но не всички от него. Това е също така обикновено се препоръчва да се използват единични кавички, а не двойни кавички. Двойни кавички имат ефект върху променливи дефиниции, особено като ги кара да бъдат оценени, а не го спира. Защо ще искаме да се спре на оценката? И как кавички направи това за нас? Ето една команда, която може да намерите интересна. "LS грама * ' гр *, както вероятно знаете, е маска изразяване за всички имена на файлове, започващи с ж. Ако аз просто напишете в командния ли г *, ще получите списък на всички тези имена в настоящата ми директория. Ако аз се определи, че псевдоним като тя е тук с кавичките, тя ще работи тази команда в текущата директория, където сте го изпълняват. Но ако се сблъскате с определението на псевдоними без кавичките, тя ще оцени маска грама * Когато тя работи това определяне команда. Така определянето на псевдонима ще бъдат ли последвани от списъка на файловете в директорията в който командата псевдоним се изпълнява, независимо от това къде всъщност възнамерявате да изпълните командата. Това не е от голяма полза, и единични кавички предотвратяване на оценката на звездичката. Така че можете просто да получите определение същество ли грама *. Тогава, когато ви свършат псевдонима, LGS, тя след това слага това. Сега няма никакви кавички, и ще оцени звездичката, когато изпълните командата псевдоним. Така че това е едно нещо. Двойни кавички ще имат същия ефект тук, но има и други случаи, в които двойните кавички няма да работят толкова добре. Ето още една. Може би знаете, командата Впиши. Командата Впиши може да се използва за сканиране на файл за линии, които имат някои струни. Така че нека да отидете тук и аз ще излезете от моя Bourne обвивка. Добре. Ето един файл. Да кажем, че това е Впиши ABC струни. Ето го. Ако го направя Впиши zddd, аз не получавам нищо. Добре. Така той установява низ, той докладва, той не може да намери, тя не го докладва. Тя извежда всички линии, която има, че низ върху него. Там са всички видове възможности тук, които можете да намерите в документацията. Ето един начин да го направя. Какво ще кажете за това, псевдоним grabc "Впиши ABC"? Това ще включва един аргумент, когато псевдонимът е дефинирана. Така че, ако го направя, че тук, сега, ако го направя grabc, сега псевдонима включва повече от проста команда. Той също така има аргумент. Досега, че работи. Имам друга команда тук, този път, така че тези, които са различни струни там и да се покаже, че това не може да намери нищо там, тъй като тя не съвпада. Ами ако искам да се включат в определението на псевдоним на файла, че аз отивам да търсите и аз искам да дам като аргумент за псевдонима низа, че аз търся? I може да искате да се каже ABC като аргумент, за да ми псевдоним, но псевдонима вече определя файла. И това е, когато този израз идва инча Забележете, че тук имаме Впиши точно както преди. Имаме файла тук, струни. \! ^, Вид на странно изражение, предполагам, ако не сте виждали преди. Удивителна е част от историята на механизма за C-черупка. Тя може да се припомни по-ранни команди, той може да си припомни аргументите на тези команди и така нататък. Механизмът на историята се използва като част от псевдонимите. Ако посочите ред след точката на удивителен знак, че ще се отнасят до тази линия в списъка с историята, които ние няма да бъдат намалени в момента, тъй като това е съвсем друга тема. Това е възможно да се определи част от линията. Така! 03:02 ще бъде вторият аргумент на командния номер 3. Каретката тук, в този израз се разбира първият аргумент. Ако не му се даде индикация за които командват имате предвид, тя се отнася до незабавно предишната команда, и каретката е символ за първи аргумент. Защото това е каретката, а не броя, не е нужно да се използва на дебелото черво, така! ^ означава, първият аргумент на предишната команда. Малко объркано тук. В този случай, когато използвате това като дефиниция псевдоним, Позоваването на историята препраща към командите в които се използва псевдонима. Така че това е връщане назад едно командване като операция по история, но като операция, известна още като тя се отнася към командата, в който можете да въведете, казват, grstrings_file. Имаме кавичките тук в него. Какво е най-наклонената черта за? В този случай, както и другаде, не искаме да се изпълни механизма за историята при определяне на псевдоним. Ако ние не разполагаме с наклонената черта там, черупката ще дръпне в първия аргумент на командата точно преди да избяга този псевдоним команда, която ние не искаме. Искаме това да бъде вграден в командата псевдоним да се обадя в един аргумент по-късно. Единични кавички не избягат удивителен знак, позоваване на историята. Може би знаете, че бягството израз означава да се промени смисъла на нещо. В този случай, това означава да се спре нещо от това да имат специално значение. Специално значение Exclamation точка е история. Escape и да го няма толкова значение. Цитати не правят това; наклонена черта прави. Така че ние всъщност с помощта на 2 нива на бягство тук. Отивам да се премести тази команда в другия прозорец, без да я напишете с помощта на тези операции за редактиране, които можете да намерите полезна. Нещо друго, тук аз ще ви покажа. Ако просто въведете псевдоним без аргументи, тя ви казва всичките си аргументи. Това е един куп псевдоними вече имах тук освен тези, които съм бил като тук днес. Но ако аз просто напишете с името на псевдоним, тя ми казва, какво означава това. Забележете, че кавичките са си отишли ​​и наклонената черта е отишъл. Този низ тук е резултат от това определение псевдоним, и сега тя е просто! ^ в него. Това ще изглежда в файлови Струни за нищо на. Така че, ако го направя grstrings_file струни, не съм го даде всичко, за да търси там, но го търси в струни. Той не намери думата конците в файлови струни, но тя не намери ABC. И това не може да намери това. Така че тук ние даваме един аргумент, който удря в определянето на псевдонима, , която е поставена в него. Това е мястото, където този израз идва от. Можете да използвате повече от един. Каретката е символ за първи аргумент. Ако искате да се използва втори аргумент, тогава ще каже: 2. Няма по специален символ за втория аргумент. И тъй като сте с помощта на цифри, вие ще трябва да използвате дебелото черво. Има, обаче, е друго място тук. Знакът за долар означава последният аргумент. И тъй като това е един символ, можете да пропуснете на дебелото черво. Така че това ще бъде последният аргумент в списъка. И там е също така, че един. Asterisk означава всичко, така че това е пълния списък аргумент, и отново, можете да пропуснете на дебелото черво, защото това не е цифра. Надявам се, че всичко при спазване на всичко това. Механизмът на историята може да се върнете към по-ранни линии в списъка на историята. Можете да направите това по дефиниция псевдоним. Никога не съм виждал това да стане. Тя ще има ефект на издърпване ранни команди от списъка с историята Когато изпълните псевдонима, които биха могли да бъдат различни команди в зависимост от това кога и къде си го изпълни. Евентуално може да искате да извадя такова позоваване просто да се знае какво е било по-рано команда. Никога не съм виждал това да се случи. Предполагам, че някой може да искате да, но това е много малко вероятно. Има и друго нещо тук. Ако използвате този референтен история тип, след това се използват само аргументите за които има такава препратка. Ако имате дефиниция псевдоним, който не използва референтен история тип, ако само се превръща в началото на командата и имате допълнителни аргументи, а след това всичко, което въвеждате след това се добавя към командата. В този случай, примерът аз просто се отказах там, ние използвахме първия аргумент; ние не се използват никакви други. Ако други аргументи са били дадени на командния ред, те няма да бъдат използвани. Така че, ако използвате препратка към историята изобщо, а след това вие трябва да го използвате, за да получите никакъв довод. Има и още нещо тук искам само да спомена, отчасти в скоби, а именно, че тази история механизъм с удивителен знак се връща към първоначалния C-черупката. The tcsh въведени операции по история които използват сортовете на команди и струни от редакторите, или Emacs или VI. Моето лично мнение е, Emacs е много по-лесно да се използва за тази цел дори ако VI използва за редовните си редакция. Има различни Emacs команди, които сега са пригодени за историята. Control P получава в предишния ред в списъка с историята. Друг Control P ще получите един преди това. Стрелката нагоре, прави същото нещо. Control N получава следващата команда, ако вече сте превъртат назад някои отношения. Стрелка надолу прави, че прекалено. Можете да се движите наляво надясно със стрелките и различни други неща. Това може да се възползва от механизма за историята много по-лесно, отколкото с помощта точка синтаксиса на удивителен знак, но вие няма да използвате, че в определение псевдоним. Ние ще отидем, че някой друг път. Променливи. Знаеш ли какво променливи са в програмните езици. Черупките тях имат също. The C-обвивката използва командата настроен да зададете променливи, така че определя променлива на стойността на б - както казах, безполезен определение, но илюстрация на това как се използва. Зададената команда ще създаде променлива, ако тя все още не съществува. Параметрите позиционни за шел скриптове могат да се разглеждат променливи, но използването на тях, както и правилата за тях са малко по-различни. Вие не можете да присвоите стойност до $ 1 в хода на скрипт. Вие ще трябва да се определи нова променлива за тази цел, ако някои от вас се искаше. Напишете SET без аргументи и ще получите списък с всички текущо дефинираните променливи. И нека се към другата ми черупки тук и да видим какво ще се получи, ако ние направим това. Доста дълъг списък там, нали? Превъртете нагоре малко. Погледни всичко това. Някои от тези неща се определят автоматично от обвивката. Черупката създава променлива и дава стойност. Някои от тях са определени от обвивката, но след това наново от потребителя според предпочитанията си. И някои от тях са създадени от потребителя в зависимост от това, което той прави през този ден. Това е само в стаята без аргументи. Има една странна особеност тук на това нещо. Там трябва да бъде или няма интервали между знака за равенство и името на променливата и стойността или пространствата от двете страни на знака за равенство, като в този. Това няма да работи, а това всъщност е валидна команда но това няма да направи това, което възнамерявате. Тази команда ще работи, защото, ако току-що създаде, и името на променливата , без знак за равенство или да зададете и име на променлива за равенството знамение и няма никаква стойност, тя ще създаде променлива до нулева стойност. Така зададете = е валидна команда. Зададената команда може да дефинирате повече от една променлива на една и съща линия. Така че тази команда тук има ефекта на определяне и двете А и Б към нула стойности. Вероятно не това, което искате. Тази тук, споменато по-рано, ще доведе до грешка защото = б не е валиден израз. Името на една променлива не може да започне с знак за равенство. И там са тези допълнителни неща тук. Колоните са били използвани, за да изберете аргументи от историята линии, и те могат да се използват - и аз не съм ходил в преди - да променя тези неща. Те могат също така да се използва за модифициране на променливи на обвивката. Тази тук, $ а, има стойност. : R ще свалиш разширение. Разширението ще бъде нещо след точка, точка и всичко след него в края на файла, Едва в края на списъка след последната наклонена черта. Така че аз го имам тук. а е това. Тя ще падне на. О. Ако няма удължаване, само имена на пътища след последната черта, това няма да има ефект. A: з, че променлива изразяване, ще свалиш последният елемент от списък директория, отново, едва след последната наклонена черта. Така / A / B / C става / A / B, но това се променя, тъй като елемент след списъка е нула. Тук има нещо, което също искам да подчертая. Тези квалификанти не търсят за съществуването на тези файлове. Те просто търсят струни. Те имат за цел да манипулират файлови имена, имена на пътища, но те могат да се използват на всеки низ дори и ако това не е име на файл. И те не изглеждат за съществуването, така че ако няма такъв файл, / A / B / C, това ще продължи да работи. Дали това е от някаква полза е друг въпрос, но той ще продължи да работи. Променливи са различни в черупките на Борн. Ние ще стигнем до това по-късно. Dollar знак може да се избяга точно като удивителен знак и звездичката. Dollar знак може да се избяга с наклонена черта или единични кавички. Двойни кавички имат странен ефект във всички черупки принуждават оценката на знака за долар променлива изразяване. Така че, ако това е да се избяга по един начин, двойните кавички могат да имат ефект на което го кара да бъде оценен така или иначе. Това е малко объркващо. Ако има няколко нива на бягство, като единични кавички вътре в двойни кавички или двойни кавички вътре в единични кавички, трябва да се тестват, за да видите какво ще се случи на променлива, ако използвате една. Тези две ситуации - двойно вътре на единични, единствен вътре в двойно - не е задължително да ви даде същия резултат. Променливи на околната среда, свързани C-черупка променливи. Променливи на околната среда също са променливи в C-обвивка, и те също са променливи в други черупки също. В С-обвивка, те са различни вида. Нещата, които се говорят, преди да са около шел променливи. Променливи на околната среда са отделна набор от променливи с изключение на няколко променливи, които ние наричаме свързаните променливи , които са много важни и ще влязат в тези по-късно. Променливи на околната среда автоматично се прехвърлят върху да черупки или команди, които се изпълняват от черупката си. Другите неща, които не са. Променливи черупката, псевдонимите не са. Променливи на околната среда са. Ето защо ние ги наричаме променливи на обкръжението, като идеята е, че околната среда се простира отвъд просто сегашния си черупка. Те могат да бъдат използвани за определяне неща за команди. Ето един пример. ПРИНТЕР, LPDEST. И двете от тези променливи могат да се определят с принтер, който команда ще използвате, за да отпечатате неща. Ако имате няколко принтера наоколо, може да искате да поставите един като теб. Причината имаме две променливи е, че различните групи от команди са написани използването на тези различни променливи. Можете да ги дават различни стойности. Най-вероятно ще им даде и двете на една и съща стойност. Тези неща работят, защото командите, които правят печат са били програмирани да се разгледа на стойностите на тези променливи. Ако една програма не са написани по този начин, ако са написани, за да направи нещо друго, променливата ще бъде без значение. Така че операционната система не търси тези променливи всеки път, когато се отнася до принтера. Команда, която прави печат търси тези променливи, ако се програмира по този начин. Тези променливи често са дефинирани във вашите файлове инициализация но не е задължително. Можете да ги определят в командния ред. Те могат да бъдат определени по команда. Команда, която работи нещо може да има свой собствен набор от променливи - променливи, които са уникални за конкретен софтуерен пакет, например. Те ще бъдат определени, когато стартирате този пакет. Как са тези променливи, за да под-обвивка? Когато под-обвивка е написан, той не пише в тази област. Площта на под-обвивка, която е посветена на околната среда променливи не е писано от под-обвивка, той е написан от копиране. Когато изпълните една обикновена команда, като например тези команди, за да се отпечатат или каквото и да, те започнем от създаването на нов корпус. Черупката създава обвивка и след това записва част от него с командата, която сте стартирали, което е малко объркващо, но това е как тези команди получите на околната среда променливи че те след това се отнасят до по-късно. Командата тук за дефиниране на променлива SetEnv. Ето как можете да го определите. Това е три елемента: SetEnv, променливи, стойност. Ако просто се SetEnv без аргументи, какво се получава? Списък на всички тези променливи. Отново, това е един хубав дълъг списък и в този случай, както и в останалите, тези променливи се определят до голяма степен от моята операция вход от самата черупка по-скоро, отколкото от всичко, което съм направил. Има и друга команда тук, printenv. Това също отпечатва на околната среда. Забележете, това последно нещо тук, редактор = VI. Това казва, че ако аз съм с нещо, което призовава редактор и аз не уточняват редактор и това ми позволява избор, той може да ми даде VI. Какво, ако го направя printenv редактора? Той ми казва какво е то. Точно преди това, там е променлива, по-малко. Това са вашите опции По подразбиране, когато стартирате LESS командата, което показва файлове. Така че, ако го направя, printenv може да отнеме един аргумент или 0 аргументи, не повече от 1. Има и други команди, но ние няма да получите в всичко, което днес. Запомни имаше модификаторите за фиктивни променливи, като например: з, който ще падне последният елемент на името на пътя, или: R, който ще падне разширение. Тези, които сега се прилагат към променливите на околната среда също. Те не са свикнали. Той се използва за да не може да се промени. Сега те могат да бъдат. Това е един от авансите с развитието на черупките през годините. Аз казвах, че снарядите, като част от среди черупки и променливи в C-обвивката са, с някои изключения, различни комплекти. Можете да установите среда променлива и променлива обвивка със същото име. Те ще бъдат в различни променливи, те могат да имат различни стойности. Промяна на стойността на един няма да промени стойността на друга. Съвкупността от тези фактори се оценяват със знака на долара - $ а, каквото $. И какво, ако имате това? Знаеш ли кой да получите? В моите тестове аз имам променливата на обвивката, но това не е документирано и не можете да разчитате на това. Така че аз ви питам, е създаването на фиктивни и променливи на обкръжението със същите имена е добра идея? Не. Добре. Какви са тези големи изключения, в които на околната среда променливи, а обвивката са свързани помежду си? Има тези 4. Capital писмо променлива TERM среда, плащам променлива термин в малки букви, тип на емулиране на терминал. Аз съм просто ще отидете тук и аз ще направя ехо, полезна команда тук, $ $ TERM мандат. И там. Xterm е вид терминал за прозорци, показани в системата на X Window. Xterm-цвят е вариант на това, че позволява различни цветове. Защо ние определяме тези? Какво е това добро за? Команди, които пренареждат екрана като редактор изпрати специално последователности, наречени екраниращи последователности, терминална или прозорец, за да се пренаредят и така нататък. Тези последователности са различни за различните видове терминали. Това кои от тях да използват разказва. Понякога има проблеми там. Може би искате да промените това. Ако нещата не работят, понякога типа на терминала е настроен погрешно, може да сте в състояние да го оправи от предефиниране на понятието променлива. В тези случаи, промяна на една променлива, променлива среда или променливата на обвивката, трябва да се промени другия. Открих от опит, че промяната TERM с главни букви не винаги се променя обвивката променлива термин в малки букви. Това е грешка. Аз не знам дали това е винаги вярно. В повечето случаи не е вярно, но тя може да бъде. Така че, ако се направи промяна, просто проверете това. Това не е често, че трябва да промените тази стойност, но от време на време, което правите. Околна среда променлива USER. Отново, променлива среда с главни букви, плащам променлива в малки букви. Това е вашето потребителско име. Това е само при много изключителни обстоятелства, че вие ​​ще искате да промените това. Ако вашето име е някой друг, това може да хвърли всички видове неща, на разстояние. Home директория, домашната директория на потребителя. Отново, вие не бихте искали да се промени това. Забележете, във всички тези случаи и едно, че ние сме на път да покрие това променливата за път, среда променлива е с главни букви и променливата обвързаната черупка е с малки букви. Ако промените една, вие трябва да се промени, от друга. Този вид свързване не може да бъде установен, тъй като не може да се свърже две променливи, различни от тези четири, и свързването на тези променливи не може да бъде отменено, Вие не може да ги раздели. Така че тези четири чифта променливи са обвързани. Те винаги ще бъде. Нула други ще бъдат. В допълнение, би било възможно да се създаде променливи със същите имена на противоположни видове. Можете да направите черупка променлива термин в малки букви или променлива среда TERM с главни букви. Тези променливи ще бъдат независими от тези двойки променливи и те ще бъдат независими едно от друго. Аз не мога да си представя защо би направил това, ако не искате да обърка хората. Тази тук, променлива път, това е наистина важна. Друго нещо, което тук е, че може да има случаи, на променливи с подобни Сдвоените имена, които не са свързани един с друг. Не може да има променливи, SHELL и черупки, с главни и малки букви. Въз основа на това име, не знам дали тази променлива е променлива черупка или променлива среда, и те не са свързани един с друг. Така че този вид на сдвоените имена не означава, обвързани променливи. Променливата на пътя, който бях преди, показваща, списък на пътища и в която черупката изглежда команди. Да се ​​към този прозорец тук и ние ще направим ехо $ PATH, главни букви - променлива среда - ехо $ пътека, малки букви - черупки променлива. Забележете, че списъкът на директории е една и съща. Те са обвързани. Променете едно, вие променяте другата. В променливата среда елементите са разделени от колони. Забележете, че. Променливите на Shell са разделени с интервали. Тази променлива среда е един единствен низ. Променливата на обвивката е масив. The Bourne обвивката не е имал масиви. Bash прави, но това е вече фиксирана част на черупката. Това е един-единствен низ, а не масив. The C-обвивката винаги е имал масиви. Решетките са много по-лесно да се работи. Можете да се отнасят до части от него. Така ехо $ път [1] и да получа / ЮЕсАр / хамбар, първият елемент. Отново, не забравяйте, знак за долар означава последният елемент от списъка с историята. Какво се случва там? Тя се опита да намери знак за долар като променлива символ. Аз го избяга. Oops. Тя не би била направена, че един от двамата. Някои от тези неща не работят толкова добре. Може би ние просто ще оставя това. Asterisk се отнася до цялото това нещо, но това е, което можете да получите, ако не посочите елемент. Друг начин, че масиви могат да бъдат манипулирани, редица елементи там, 7 елементи. Тук ние поставяме знака паунд преди името на променливата. Ето още една. Сложете един въпросителен знак там. Това е логическа стойност. Това показва, че съществува променлива. Това е друг начин за работа с променливи. Това, между другото, не трябва да бъде променлива масив. Това може да бъде всяка променлива. И ако го направя, няма такова променливо и получавам 0. Друг малко нещо там за променливи оценки. Върнете се в тази тук, ако по някаква причина сте искали да работят с този по-скоро, отколкото да работи с масива, променливата на обвивката, има команди, които могат да се разделят тези неща въз основа на дебелото черво. В действителност, ако ти започваш да се прави това в Bash черупката вероятно, някакъв скрипт, който ще бъде най-вероятно как ще го направим. Но в C-черупката е много по-лесно да се използва масив. В Bourne обвивка, променливи са възложени от един израз, подобен на този, подобно на начина, по който можете да присвоите променлива в език за програмиране, и тук трябва да има никакви пространства. Това е необходимо тя да бъде само един низ. В обвивката на Bourne тип, всички променливи са фиктивни променливи. Променливи на околната среда са подвид на променливите черупки. Те се отличават от променливите на не-екологични от износител. Заповедта да се направи това е износ, както и износ на принтер. Ако трябва да се определи като променлива, ако искахме команда печат, за да го намери, тя ще трябва да бъде променлива среда, и това е начина, по който го направи един. Тук има нещо, което някак объркващо. Този израз, износ за околната среда, произтича от това понятие Bourne обвивка, и още, че експресията се използва в описанието на C-черупката когато няма такава команда като износ. Ако току-що износ от само себе си, можете да получите списък на изнесената - Така че, ако аз просто се изнася тук, няма такова нещо. Добре, ето. Тези неща, между другото, също са определени от обвивката. Аз не определи нито един от тях от себе си. Черупката прави всякакви неща, от само себе си. Тя следва да направи неща автоматично. В Bash или Korn черупки, можете да стартирате команда, като тази, с който ще се даде променлива стойност и го експортирате в една команда. В обвивката Bourne те трябва да бъдат отделни команди като износ а. Тук е друг аспект, който е объркващо. Зададената команда в C-обвивката определя променливи и без аргументи ви казва какви стойности на променливите са. В Bash черупката, набор команда без аргументи прави същото нещо, но с аргументи, че прави нещо съвсем различно. Така че това са най-различни аргументи тук. Някои от тях са променливи на обкръжението, някои от тях са фиктивни променливи. Всички от тях са фиктивни променливи наистина. Някои от тези, които са променливи на обкръжението. Зададената командата с аргументи може да се използва за управление на на позиционните параметри на скрипт, което е начин на всички тях става наведнъж. Ние наистина не може да отиде в това днес. Тя може също да се използва за промяна на поведението обвивка. Особено в Bash има променливи, които ще определят как черупката държи. Тогава също само тази една команда, която можете да видите, тази команда. Оформление, последвано от променливи и променливи видове се използва в черупките на Korn и Bash. Това не е задължително, но може да се използва за ограничаване на стойностите на променливите, която може да бъде полезна за предотвратяване на грешки, и това е доста често срещано явление. Така че аз съм просто се спомене, че в случай, че го видя някъде. Командата къде. Запомни споменах по-рано, където команда в C-черупки, което мога да ви кажа мястото на команда името на пътя. Тук е команда смяна. Вие трябва да намерите на клавиатурата си някъде герой, който изглежда по този начин. Мястото на клавиатурата ще се различават. Нарекохме го backquote. Става въпрос за размера на един цитат. От само себе си от горния ляв до долната дясна. Тук, на моя Mac клавиатура е в горния ляв ъгъл. Това характер може да се използва за изпълнение на команда в рамките на една команда. Ако имате израз вътре backquotes, този израз е команда, тя се изпълнява. Резултатът от тази команда след това е заместен за цялата експресията backquote вътре вече команда, която след това работи с тази продукция като част от своята поредица от аргументи и така нататък. Тук е команда, която използва това. Да се ​​докаже, че системите тук. Нека да отидем до тук, извадете backquotes. Control A ме стигне до началото на реда с синтаксис редакция на Emacs. Досега имена на пътища, е това, което прави, когато, но когато го правя по този начин, то тогава се включва в този списък, на пътища и файлове на мястото на целия този израз backquote и писти LS-л върху тях. Нещо удобно, нали? Така че това е един чист нещо. Ето как backquotes работят. Сега нека да слезем малко по-нататък. Това са псевдоними. Аз всъщност се използват тези. Ще се опитам да се получи това с една операция редакция. Добре. Сега нека да видим как тези определения излизаха. псевдоним LWH ми кажеш как е определена. Забележете, това е само това, но външните цитати са извадени и точката на удивителен е излетяло. ! *, Пълен списък на всички аргументи. В определение псевдоним ще прилага обратно до мястото, където аз използвам това. LWH KSH Баш. Добре. Вижте как става това? Това ми спестява малко писане. Нека вървим нагоре малко, само за да спомена нещо друго тук. Забележете, тук тези различни снаряди. Трябваше да спомена това преди. The CSH има две тук и така прави / бин / tcsh. Ние може да установи с други средства, че това всъщност са един и същи файл. Запомни казах ако въведете ш получите Баш. Въведете това и ще получите това. Но тези, които не са свързани. Тези, които имат единични там. И това не е от вида на файла, който може да се обади още един. Така че тези, които са отделни файлове; тези на C-черупки са един и същи файл. Обратно тук, другият тук, този псевдоним, имайте предвид, че се кандидатира тази команда файл. Това псевдоним работи това. File ви казва вида на даден файл. Така FWH KSH Баш. Добре. Това е на изхода на командата файл. Аз не знам дали знаеш какво означава това тук, Mach-O универсална двоичен с две архитектури. Има два възможни типа процесорни в Mac, и някои програми са били написани, за да бъде в състояние да работи и с двете, и командата файл може да се определи, че, така че това е какво означава това. И двете от тези файлове са написани по този начин. Така ние виждаме как работи псевдонима, виждаме как работи backquote, виждаме как работи действителните файлови LS или файл. Това може да не работят. Опитайте ", където където" и "Д Ш където". Добре, нека да опитаме това. къде къде. където е черупка, вграден. Запомни по-рано ние показахме, че Bash не е имал къде. Ако изпишете където в Bash черупката, можете да получите съобщение за грешка. Това е просто част от черупката, а не като отделна команда. Какво ще стане, ако типа LWH търсите къде? Вижте какво се случва там. Ран къде къде, имам този изход, а след това се опита да тече LS като л от това къде е черупка, вграден. където е там, но други такива не съществуват. Никой от тях не съществуват, всъщност. Така че това не винаги работи, и тя също така илюстрира как някои неща не правя точно това, което бихте могли да си помисли. Нека слезем малко по-нататък тук. Това тук е в Bash. Това е също така заместване на команди като backquote. Но за разлика от backquote, той използва тази променлива стил. Има редица изрази, които започват с знака за долар, и докато те не са променливи, те назаем използването на знака за долар за да покаже израз на някакъв вид. Това може да бъде заобиколен от скоби или скоби или двойни скоби, които има различно предназначение. Единични скоби тук са една смяна команда точно като backquotes. Двойните скоби всъщност е аритметична операция. Има и други синтаксиса, други операции. Backquote синтаксис е достъпно в Bash. Въпреки това, това е за предпочитане. Това е много по-лесно да се чете и това позволява гнездене. Можете да имате вътре $ (команда) друга команда, нещо подобно - Аз получите списък там. Това ще работи, ако имах backquote също. Ами ако искам да направя нещо подобно - Може би не би всъщност използвате тази команда, но това вътрешно заместване команда повтаря имената на всички файлове, започващи с А, то това работи ли-л на тези файлове, и след това просто отразява на изхода. Може би не би направил това, ти току-що направи ехо или LS, но това илюстрира как работи гнезденето на команди. Така че просто още една особеност тук.  Споменах това по-рано, че когато имаш къде в C-черупката, въведете произведения в черупки Bourne тип за търсене на команди. Вградени в команди, само това, което казах там. Командите са част от черупката, като например къде. Когато черупката изпълнява команда като LS, то тя е локализирана по пътя, установи в някои директория някъде, гласи, че в паметта, създава нова черупка, чете LS команда или каквото и да било в черупката където на околната среда променливи вече са разположени, и след това да го прехвърля изпълнение към него. Вграден команда, кодът за тази команда е вътре в черупката, така че черупката просто започва изпълнение част от свой собствен кодекс. където е такава команда. То всъщност става по-бързо. То не трябва да се чете нещо в паметта, то е вече в паметта. Вградени в команди винаги имат предимство пред команди със същото име. Командите, които са в директории по пътя могат да имат едно и също име, команди в различни директории, файлове в различни директории. Този, който се появява по-рано през пътя е тази, която ще получите. Ако има вградена команда, можете винаги да го получи. Няма начин да му се даде по-нисък приоритет от команден по пътя. Ако искате да получите тази команда пътя, можете да въведете пълния път. Ако имаше команда където по пътя някъде, можете да напишете / бин /, където и вие ще го получите. Ако не искате да напишете цялата пътека, можете да дефинирате псевдоним. В действителност, ако ти е дал псевдонима същото име като вградена команда, тя ще работи тъй като определението на псевдоним е оценена преди черупката прецени, че това е вграден в команда, която трябва да бъде изпълнена. След това става малко по-сложно с някои команди тук. В случай на някои команди са всъщност вграден команди и по пътя. Един от тях е ехо, командата аз просто използва преди малко в тези примери. Echo е заповед по пътя и това е във всяка черупка. Те не непременно всички се държат по същия начин. Той първоначално е бил команда само по пътя. Тя е построена през на черупките по-късно. Тъй като има варианти, които зависят от околната среда и опциите на командния ред, вградените команди са написани да функционират по същия начин като командата, която е била в пътя, това е малко вероятно те да са написани по този начин Ако командата вече не беше написана за пътя. Така че това има странични ефекти. Неговата история има ефекти тук. Има опции там. Има и опция определя от променлива в tcsh нарича echo_style. Това е една от тези променливи, които могат да променят начина, по който работи ехо. Има и други случаи, в които можете да зададете променлива , която променя начина, по който операцията по черупката, включително вградена команда, работи. Това няма да повлияе на нещо друго тъй като други команди нямат достъп до променливите черупки, само променливи среда. Но операции черупки могат да четат променливите черупки. Това няма да работи за CSH. Това е само tcsh. Това е едно от подобренията. Разбор има последователности, когато го оценява метасимволи, когато го оценява променливи, псевдоними, справки по история. Има определена последователност за тези неща. Ако тя прави неща в определена последователност и стига до нещо, което е израз на един вид които вече са оценени, не ще оцени отново. Ако тя стане, тогава тя просто ще премине върху героите. Така че, ако оценката на някои изрази като заместване на команди или променлива или каквото поражда израз които вие ще искате да се оцени, който ще работи само ако възникне, че по-късно оценяване на последователността. Надявам се, че съм ясен там. Това разбор последователност, една операция в C-обвивка, не е същото за вградени команди, тъй като е за не-вградени команди. Аз не съм сигурен за Bash там. Например, ако променлива обвивка изготвил история то вероятно не би се върнал в историята. Тя просто ще получи удивителен знак. В действителност, ние можем просто да се опитам, че точно сега. зададете = и ние ще трябва да сложи това в там. О, чакай. Извинете. Направих това в Bash. Исках да го направя тук. Виж, така че не се оценява, че историята препратка защото той вече е минало точката на оценяване по история изрази когато оценена променлива. Така че това е един ефект на разбор. И отново, вградени команди не се правят по същия начин. Добре. Да отидем в следващия един тук. Това има за цел да бъде една линия, но това е което го прави по-лесно да се чете. Какво означава, че правя? Може би си спомняте, че ние можем да преценим звездички като името на файла заместващи символи, и са налице други заместващи символи като името на файла въпросителния знак и скобата изрази. Този вид оценка се нарича globbing. настроите noglob в началото на тази команда казва не прави това. изключено noglob казва се върнем към това, че. Имайте предвид, че набор Глоб няма да има такъв ефект. В обикновения език, задайте Глоб или изключено noglob ще изглежда да е еквивалентна, но тук не е така. Това е изключено noglob. Сега Tset. Tset застана за терминал набор. Той не е свикнал, че често сега, но преди прозоречни системи станаха достъпни и сте имали един терминал, може да се наложи да се определи вида. И ако нещо се приближаваше над Ethernet или от мрежата, може да искате да се каже, че това е vt100. VT100 е нещо като стандарт в терминал бизнес. Той идва от терминала декември. Ако просто направи телефонна линия - забележите, че? Това датира от начини, нали? Така че, ако ние просто се Tset тук, ако аз просто правя Tset, това е нулирането моя терминал, но не видя нищо. Тя всъщност не променя нищо. -Ите Добре. SetEnv TERM Xterm-цвят. Ние вече знаем, че терминът е определен по този начин, така че да не се промени. Това е начина, по който би искал да го направя. Но забележете, че тази команда, Tset-ите, просто изходните тези команди. Той не ги изпълнява. Тя не изпълните тези команди, той ги изход. Така че това е предназначено за производство на команди, които след това ще бъдат стартирани. Помниш ли командата в този файл аз просто показа, че имаш Q в него. Така че нека да направим това. The Q потиска някакъв изход, но това няма значение тук, както можете да видите. Просто правя това, за да ви покажа, че не е от значение. Това е в backquote синтаксис. Обърнете внимание на backquote тук, backquote тук. Аз съм пропуснал тези неща тук. Това са случаи на това казва какво да правя в случая на определени видове терминали - Ethernet, мрежа, телефонна линия, това, което имате. Тя не е от значение тук, защото ние не сме всъщност прави някое от тези неща. Аз съм просто илюстрира командата. Ако го направя това с backquote, аз какво ще получа? Също така забележете, тук, че това включва набор noglob и изключено noglob, така че тези, които са вече излишни в определението. Това не винаги е вярно, но сега те са включени в тази команда. Но нека да видим какво ще се случи, ако го направя, че и да отидете в началото на реда с Control A и аз да го направя. Добре, задайте: Командата не е намерена. Това е малко странно, нали? комплект е добре позната команда. Това е част от черупката. настроите: Командата не е намерена? Защо е това? Хм. Е, нека да помислим за това. Тя бяга команда смяна backquote, и, което се случва в определена част на последователността на разбор на командата. комплект е вградена команда. Така че с времето го прави тази команда смяна, той вече е придобил покрай точката на идентифициране вградени команди. Така че тя се отнася задава като че ли е команда в пътя. Излишно е да казвам, че не го намерите и получите съобщение за грешка. Е. Има един пример за разбор последователност. А какво ще правим с това? Забележете, това много интересно команда тук, оцен. Чудя се какво прави това. Ако погледнете в ръководството - и нека просто да го направя за да покаже как объркващо тези наръчници са - мъж tcsh, объркан употреба, намиране неща тук не е било лесно. Ето ни и нас, Оценка арг, така че ние може да има един или повече аргументи и има списък на нещата там. Обработват се доводи като входове към черупката и изпълнява командите, получени в контекста на настоящата черупката. Това обикновено се използва за изпълнение на командите, генерирани в резултат на команда или променлива смяна, защото се случва разбор преди тези замествания. Много добре. И тук те дори се позова на командата Tset за използване на извадка като един току-що ви показах. Сега трябва да получите обратно към прозореца полезен място. Нека да дойдеш тук и ще видим, че оцен се използва точно преди това. Така че нека да видим какво ще стане, ако ние поставяме - тук ние вървим напред със стрелките до тази команда и контрол на A към началото, оцен. Добре, така че тя работи. Когато направите Eval, тя отнема това, което идва след него и го прави команда. Това ви позволява да го анализира по същество два пъти. Тук частта работи тази команда вътре в backquotes, получава на изхода. Продукцията се очаква да се проведе, тъй като тези команди тук като тези в този и този. Така че тези команди са сега тук, в тази последователност, но те са вградени команди и тя не може да ги получите веднага. Така че отиваме в EVAL, Оценка улавя, че нагоре, започва всичко отначало, и тя работи. Един пример както на backquoting, Оценка, разбор, последици от разбор, и команда, която е най-вероятно от много голяма полза за вас днес. Добре. Добре, Umask. Нека да разгледаме тази команда тук, Umask 022. Чудя се какво прави това. Нека просто въведете Umask с нищо след това. 22. Добре. 022 и да го направя отново. Както може би се досещате, Umask без аргументи ви казва текущата маска; Umask с аргументи, че го прави, но това беше едно вече имах. Какво означава 022 кажеш? Те са тук, за защитите на даден файл. Те определят кой може да чете или пише или изпълни файла. Защити се наричат ​​също разрешения. В R щандове за четене, на w за запис, и X, който не присъства там, стои за изпълнение. Има три категории там. Последните три елемента са в категорията на потребителите. Тези, които се отнася до мен, потребителят. Тези 3 тук се прилага към групата. Файлът принадлежи към една група, потребител може да участва в няколко групи, но ако потребителят е в групата, към която принадлежи този файл, След това тази защита ще се прилагат за него, ако той не е на потребителя. И това е всеки друг. Тези категории са взаимно изключващи се. Защити на потребителите, се прилагат към него, защитите на групата се прилагат за членовете на групата, които не са потребители, и другите защити се прилагат само за хора, които не са потребители и членовете на групата. Ако има един R или AW или х, това означава, че защитата е предоставена. Ако има тире, това означава, че не е така. Има действително са други неща, които могат да бъдат поставени тук, освен тези, които няма да влязат в предприятието. The Umask определя по подразбиране за файловете, които сте създали. И като маска, по същество се казва битовете, че не сте задали. Как е това да стане бита? Ако мислите, че на всеки един от тях като осмично число, това е най-1s бит, това е 2S, това е най-4s. Така от 0 до 7 Ще опиша каква комбинация от R е, вата, а хикса имате за тези три и след това подобен брой за тези и след това за тях. Така 022 означава 0 за друга, 2 за група 2 за потребителя. Но това е маска. Маската е това, което не е нужно. Съжалявам. Аз просто ви е дал нещата в грешен ред. Това е първата 3. Тези 3 са потребителя, тези три са група, 3-те са друга. Съжалявам, че ви е дал тези в грешен ред. The 0, който е първият от тях, не се показва стойността, но дали едно число не е там, това е 0. Това означава, че всички три от тях ще се разреши. Забележете, че в този конкретен един Х не е позволено. Причината е, че обвивката е в състояние на определяне дали даден файл трябва да бъде изпълнена или не. Тъй като това не е изпълним файл, той не е посочил х. На две средства, които пишат разрешение, втората категория тук, на един по средата, е отказан. Така че отново, това са нещата, които го отричат. Е, х е позволено, но не е тук, защото това не е изпълним и подобно на другите. Така че това е една обща Umask. Друга често срещана е една 700 - подарете всичко и никой друг нищо. И има и други възможности. Ще се върна към това. Използвайки историята мога да търсите обратно за това, LWH до там. Добре. Така че тук, това са черупките. Bash, собственикът, който е система сметка, може да направи всичко. Група и всички останали могат да направят чете или да изпълни, но не пиша. Това един дори не позволява на собственика да пиша за него. Ако собственикът иска да пише на него, сметката на системата, той ще трябва да се промени защитата на първо място. Но пак, на Umask задава по подразбиране чрез маскиране, чрез посочване на бита, които няма да бъдат зададени. Това е обикновено в един от своите инициализация файлове, което е. Cshrc за C-черупката или. профил за черупки Bourne тип. Тя може да бъде другаде и ако има други файлове инициализация на системата. Както и да е, това е Umask. Има нещо, което вид на странно тук, и това е, защо има една единствена команда за това? Ако аз пиша това, аз ще го променлива, Umask = някаква стойност направи. Защо има цялата команда точно за тази цел? Причината е, това просто се връща към корените на Unix. Unix е просто някакъв програмен проект в Bell Labs в началото на 1970. Хората просто се събраха, за да програма. Те никога не възнамеряваше да се превърне в световен мащаб операционна система. Различните хора са писали различни части, без да мисля много за това как те щяха да бъдат използвани - по-скоро оскъдна. И тя дойде заедно по този начин, и тя все още е така, че в някои отношения. Така че това е отражение на историята, и все още има тези несъответствия и странни елементи от нея. Добре. Следваща един тук. Както написах по-рано, на C-черупката не е наистина се използва много за програмиране, въпреки че може да бъде. Той изпълнява по-бавно, отново компромис между интерактивна употреба, който има повече процесорна участва от скорост, което може да се направи без обработката. Допълнителните характеристики, добавени към обвивката Bourne от Korn и Bourne-отново черупките не изглежда да ги забави, и аз не знам защо е така. Тя може да бъде само добро програмиране, но аз не съм в състояние да се знае. Бързина тук всъщност не е толкова голям проблем, въпреки че се споменава. Причината е, че шел скриптове всъщност става доста бързо. Ако има много команди като в изчислителна програма, най-вероятно няма да го направи в един скрипт. Операциите, там са доста прости и ясни. Тези, които аз съм с опит, които са твърде бавни включва многократни приложения на бавни команди. По-рано споменах редактор поток СЕД. Тази команда е бавен. Ако изпълните SED много пъти, вие ще получите един бавен скрипт, но това не е черупката, че е бавен. То бягане в Bourne обвивката няма да бъде много по-бързо, отколкото го изпълняват в C-черупката, въпреки че има може би някои предимства там. Допълнителни възможности за програмиране, от друга страна, са съществени причини, поради които бихте използвали черупки Bourne тип. C-обвивката има странни функции към него - факта, че не знам дали дадена променлива е променлива черупка или променлива среда. Тя може да бъде много объркващо. Това не е толкова лесно да се пишат само въз основа на вашия опит на програмиране и на други езици. Мисля, че може да намерите черупки Bourne тип по-съвместими с вашия опит. Някои скриптове, обаче, могат да бъдат хиляди линии в дължина. Тези, които съм виждал, са използвани за закърпване операционни системи. Тези, които могат да изпълняват много бавно, но вие не изпълните тези много често. Това е само когато правиш кръпка, и това е само управителя система, който прави тези неща, така че това не е наистина голям проблем. Тези, които са стотици линии дълго всъщност изпълни сравнително бързо. Споменаването на този тук, какви са тези подобрения? Вече споменах някои от тях - масиви, изчисления, на $ () израз за изчисления в Bash черупката, Другият вид на команда смяна. Има различни видове на команди за изпитване чрез които можете да направите, условни тестове за наличието на даден файл или други неща. Тук за последен път, тази команда тук. Какво прави това, и защо ще го използвам някого? printenv variablename. Ние знаем какво printenv прави. Той ни казва, стойността на променливата. И printenv variablename няма да ни каже много, защото няма такова променливо. Blank. Но нека да го даде нещо смислено. Това не е ли един от двамата. Добре. Предполагам, че никога не е определено, че. Нека просто да се провери моята среда. Това е друга команда, с която можете да инспектира вашата среда. Налице е добър стар редактор, която видяхме преди. Какво означава, че правя? Тук имаме израз backquote. Не забравяйте, това е C-черупката. Така printenv РЕДАКТОР ще ни даде стойност на редактор. Това е VI. И тогава тя ще установи, че стойността на променлива, командата набор. Така че сега, ако го направя ехо $ а, получавам VI. Това не изглежда ужасно полезно. Въпреки това, той всъщност наистина има цел. Тъй като ние не знаем дали дадена променлива е променлива черупка или променлива среда с помощта на синтаксиса за оценка знака за долар, можем да използваме printenv за да се уверите, че тя е променлива среда. Така че, ако има променлива редактор черупка, това не би го намерила. Това работи само с променлива среда. Ако имаше променлива черупка и исках стойността си, Бих трябва да се намери някакъв друг начин да го направя. Един от начините да се направи това би било по този набор и тръби. Това е един от най-метасимволите, специални знаци. Той изпраща на изхода на комплект към нещо друго. Да видим какво можем да намерим там. Нищо. Добре. Нека просто да видим какво има там всички заедно. Беше echo_style, на един споменах преди. Добре, нека да направим това. Запомни споменах и преди, echo_style определя начина, по който ще се изпълнява командата ехо. BSD означава Berkeley Standard Distribution. Това е Berkeley Unix от 1970. Това е един от начините, по които отекват може да работи. Настройка echo_style до тази стойност в TC-черупката ще предизвика ехо да се държат по този начин. Така определи прави това, но зададете получава само шел променливи. Тя не ще намери редактор, който не е променлива черупка. Нищо. Така че това е един от начините да ги отличава. Но фактът, че ще трябва да мине през някаква странна команда като че да се прави разлика между черупка променливи или променливи на обкръжението показва вида на непрактично характер на С-обвивка за някои цели. И сега, последната и може би най-малко, това е страниците на човека. Тези, на които може би знаете, мъжът е кратка команда за ръчно. Страниците на човека за снарядите са трудни за четене. Те са много отдавна. Те са организирани по начин, който може да направи по-трудно да намерите това, което търсите. Така че, ако търсите нещо с цел, Може би не знаете, ако тази цел е променлива черупка или нещо друго, така че може да не знаете къде да го търсим. Можете да търсите различни струни, но конците често се повтарят. Така че това е по принцип трудно да се чете. Ние просто погледна към мъж страницата TC-черупка малко преди да намеря командата Eval. Някои неща вървят по-бързо. Един от подходите е да се търси низ. Можете да използвате пейджъра. Pager има наклонена черта да се търси команда или низ вътре операция пейджър. Man по подразбиране ще използва пейджъри, или да бъде повече или по-малко. Аз не знам дали сте запознати с тези, но тези, които могат да покажат файлове малко по малко. Аз бях с по-малко, за да покажете тези конкретни файлове, които имаме тук. Можете да търсите вътре. Можете да опитате да използвате различни струни търсене. Също синтетични страници в различни операционни системи не могат да бъдат еднакви. Те могат да бъдат отделни страници за CSH и tcsh. Те не са на Mac, но те могат да бъдат, ако тези, които са отделни команди. Ако ш наистина не се обади Bash, там вероятно ще бъде отделен човек страница. Някои системи имат отделни човека страници само за C-патронни вградени команди. Понякога, ако искате да прочетете описание на вграден в командния това е също по пътя, като ехо, което трябва да се чете страницата човек на тази команда на ехо да определи как тя ще работи като вграден в командния дори и да не се обаждате на вградения в командата. Това е недостатък на операционната система като цяло, а не само за черупките въпреки че за черупките по-специално страниците на човека са доста дълги, отчасти защото те добавят полезни функции към тях, което може да бъде положителен. Добре. Има ли някакви въпроси? Всякакви теми, които искате да изведете? Някаква връзка тук? Е, това е било много приятно да говори с всички вас. Надявам се, че имаш нещо от този семинар че ще бъде полезно за вас в бъдещите ви начинания. [CS50.TV]