[Seminář - Unix Mušle, prostředí] [Douglas Kline - Harvard University] [To je CS50. - CS50.TV] Dnešní téma je unixový shell. Jsem Douglas Kline, expert, nebo alespoň rozumně příslušný uživatel, skořepiny. Shell je rozhraní pro uživatele na operačním systému počítače. Název je zavádějící, protože, na rozdíl od shellu zvířete, , která je tvrdá a ochranné, počítač shell umožňuje komunikaci. Takže porézní membrána by asi bylo lepší metafora. Původní Shell pro Unix je shell Bourne. Bourne se píše B-O-u-R-N-E. Bourne byl jedním z původních autorů Unix, a tak shell je pojmenovaný po něm. Název této nádrži jako příkazu je prostě sh. To je příkaz, který lze provést. Shell se spustí při přihlášení. Když se přihlásíte k počítači, shell jen spustí za vás, a to je to, co se vaše příkazy. Je možné začít jindy také. Máte-li vyvolat okno s žádným jiným označením, bude to spustit shell pro vás. To je, jak to je, že můžete jít k oknu a začněte psát příkazy a tak dále, že i když jste se přihlásit do tohoto okna. Navíc, pokud si vzdálené přihlášení, pak to začne shell na vzdáleném počítači. A to je možné spouštět příkazy bez interaktivním shellu. To může znamenat přímo ve Vašem současném provozu, a to může také znamenat dálkové ovládání. Dalo by se poslat příkaz k jinému počítači, který zahrnuje spuštění shellu tam. Ve skutečnosti, že musí obsahovat zakládání shell tam i když to není váš konečný účel. Když se něco začne takhle, to nemusí nutně začít nový shell. Máte-li vychovávat nové okno, je možné říct, že, aby se editor nebo nějaký jiný příkaz. V tomto případě, editor bude začínat od nuly. Když editor skončí, skončí okno. To je trochu neobvyklé, ale to může být provedeno. V těchto případech nebude shell. Takže to není nutně pravda, že okno nebo některé z takových aplikací přinese do shellu. Shell analyzuje příkazy. Analýze znamená identifikaci jednotlivých prvků a jejich klasifikaci. V rámci příkazu, kompletní řetězec, který zadáte, tam bude jeden nebo více jednotlivé příkazy, které mají být provedeny. Ostatní prvky mohou být argumenty. Tam může být také speciální znaky, které ovlivňují výkon příkazu. Mohou posílat výstup jinam než na obrazovce v případě, že příkaz by obvykle odeslat ji na obrazovce. Je možné přesměrovat vstup, to může dělat jiné věci také. Existují různé jiné symboly, znaky, a tak dále. Syntaktická analýza zahrnuje detekci a interpretaci ty věci. Nyní, pokud nejsou k dispozici žádné další otázky, které je spíše pravděpodobné, protože tam nejsou více lidí, půjdeme na mé další stránky zde. Jsem řekl dříve, že Bourne shell je výchozí shell. Tam jsou jiní. Jedním z nich je C-shell. Příkaz je csh. Název C-shell je jen hra se slovy. Tento shell byl představen s Berkeley Unix v polovině roku 1970. Berkeley Unix byl významnou událostí ve vývoji Unixu. Byla to obrovská revoluce a včetně zavedení tohoto shellu. Důvodem pro tuto hru se slovy, C-shell, je, že C-shell má některé vlastnosti v něm, které se podobají jazyka C, které Bourne shell nemá - nebo to neměl v té době. K dispozici je také TC-shell. To je nadmnožinou C-shell. To má další funkce, z nichž mnohé jsou užitečné pro interaktivní použití, jako je například připomínající příkazy v mechanismu historie, které budu popisovat něco později - jednoduchým způsobem, modeled po editoru. Má také vázání, které vám umožní svázat krátký řetězec klíče na delší příkazu. Nebudeme se dostat do toho dnes. To má některé funkce, které jsou užitečné pro programování. Nicméně, C-shell není často používán pro shell programování. Programy Shell, pokud jste už nevěděli, jsou programy, které se skládají z vlastností shellu. Dalo by se spustit to jako programy. Můžete napsat spoustu příkazů shellu do souboru a spustit soubor. Nemusíte jej zkompilovat. To je interpretační jazyk. Fráze C-shell je nyní nejasný, neboť by mohl odkazovat pouze na původního C-shellu, csh, nebo na všech C-skořápky, včetně tcsh. Je to trochu nejasné. Později shell je shell Korn, ksh, pojmenovaný po programátor, Korn. Tento shell pokoušel začlenit do 1 shellu výhody C-shell pro interaktivní použití a Bourne shell pro programování. To bylo použité jako interaktivní shell některými lidmi - minoritní. Později však došlo k dalšímu představení, Bash shell, bash, opět hra se slovy, Bourne-znovu shell. Je to rozšíření pláště Bourne. Korn shell je také. Oba z nich jsou. Má stejné cíle Korn o sloučení C-shell je a výhody Bourne Shell v roce 1 skořápce. Mnoho vylepšení z Korn shellu jsou také zahrnuty v Bash. Bash, má však více, a je proto vhodnější. Bourne-znovu shell a Korn shell se nazývá Bourne typu skořápky protože obsahují vlastnosti Bourne Shellu, které jsou v rozporu v některých ohledech s C-skořápky. Existují i ​​jiné skořápky kromě těch, některé určené pro omezené použití, možná pouze na některých příkazů, možná specializované účely, není často používán. Dobře. Další položka zde. Bash shell stalo se spojené s různými formami Linuxu. Nejsem si jistý, jestli je to pravda, každé formě. Existuje mnoho forem tam, a já jsem nepoužil všechny, ale ty, které jsem použil to stalo s ním spojené. Takže pokud vím, neexistuje nic, co Bash což je víc, kompatibilní s operačním systémem Linux než jakékoli jiné kombinace pláště a operační systém. Myslím, že to asi jen odráží sklony programátorů. To, že má být spojována s operačním systémem Linux je další důvod, proč raději Bash na KSH od věci, je pravděpodobné, že bude v něm napsáno, a je pravděpodobné, že se šíří. Dám vám další důvody, které později. Bourne shell skripty by měly probíhat pod Korn shellu nebo Bash. Máte-li napsat něco pro Bourne shellu, můžete pravděpodobně spustit pod ksh nebo bash. Korn shell skriptů bude pravděpodobně spuštěn pod Bash, ale nemohu zaručit, že. Později zde na, C-shell skripty by měly probíhat v rámci TC-shell. C-shell byl vlastně nikdy ve velké míře používají pro skriptování od Bourne shell a později Bourne typu skořápky byly vhodnější pro tento účel. Takže to opravdu není tak důležité. Existuje poměrně hodně Bourne shell skripty, které byly napsány dávno, před Korn shellu nebo Bourne-znovu shell byly zavedeny. Ti, kteří jsou ještě v použití, který je součástí operačních systémů, a tak zjistíte, je, pokud se podíváte do operačního systému nebo některé staré programové balíčky. Bash je do jisté míry stává jakási lingua franca operačních systémů. Je to již byla rozšířena na Windows a VMS. VMS, v případě, že nevíte, je proprietární operační systém Digital Equipment Corporation, který je ještě v použití, a to především v zákulisí. A pokud to bude běh na několika různých operačních systémů, pravděpodobné, že lidé mají tendenci se posouvat za to. Ale tento vývoj je poměrně nedávný. Je to jen začátek, takže nemůžu předvídat, zda to bude dopadat být opravdu ten druh lingua franca. Také proto, že cestami souborů a knihoven se liší mezi různými operačními systémy, nemusíte být schopni napsat bash skript na jednom operačním systému a spusťte jej na jiný. Měli byste být schopni se pohybovat mezi různými Unix, Linux Operační systémy Mac OS, ale ne nutně na Windows nebo VMS. Možná budete muset změnit popis souboru název cesty, a některé knihovny se může lišit, které mohou ovlivnit způsob, jakým některé příkazy pracovat nebo jak zpracovat argumenty a podobně. Kromě toho, další opatrnost je, že neexistuje žádná záruka že všechny různé mušle jsem se již zmínil - Bourne shell, C-shell, TC-shell, Korn shell, Bourne-znovu shell - bude k dispozici v každém Unixu nebo Linux nebo Mac OS počítače. Oni prostě nemusí být tam. To je jeden z upozornění zde. Je to nešťastné omezení tady, protože jste chtěli věci pracovat všude, ale bohužel, můžete se spolehnout na to. Dobře. Další, kdo zde. Řekněme, že chcete napsat skript, Program se skládá z příkazů shellu. Můžete psát své příkazy, dát je do souboru a spustit soubor. Co když chcete zahrnout argumenty? V případě skořápkových operací, argumenty se nazývají parametry a poziční parametry a oni budou volány znak dolaru a číslice, $ 1, 2 dolary. Takže v případě, že skript má toto jméno, můj první argument by mohl být argumentem 1 a můj druhý by mohl být argument, 2, a uvnitř mého scénáře, když chci, aby se na tyto věci - pojďme vymazat to, protože jsem opravdu chystá spustit - v mém skriptu budu mít $ 1 odkazují na arg1, $ 2, který přijde na to, že způsob, arg2. Takže ty symboly jsou k dispozici odkazovat na argumenty, a ty se vztahují na všechny granáty. Kromě toho existují další znaky. $ * Se vztahuje na celý seznamu argumentů, všechny z nich. $ # Se odkazuje na počet argumentů. Opět platí, že to platí pro všechny skořápky. Tyto symboly * a #, může být použit s těmito významy v jiných místech také. Nebudeme se dostat do toho. Shell specifikátor řádek. Co to je? Řekněme, že jste napsali scénář a je to pro konkrétní shell a chcete jej spustit. Jak víte, co shell váš operační systém bude používat ke spuštění skriptu? Na jednom místě, kde by mohl předpokládat, že by jej spustit v Bourne shellu pokud jste neřekl jinak, ale lidé nejsou psaní skriptů v Bourne shell, který už tolik a nemůžete ani spoléhat na to už. Takže tady máme shell specifikátor linku tady. To určuje Bash. Všimněte si, že to určuje ji v cestu ke složce, / bin / bash. Pokud počítač má Bash shell, ale ne v adresáři bin, / bin, to nebude fungovat. To je další kvalifikátor, další opatrnost zde. Křížek je komentář linka charakter. To platí pro všechny granáty. Zejména případ, #! na začátku skriptu, je zvláštní případ. To určuje shell, ve kterém je skript spuštěn. Jak jsem říkal, to nemusí být stejné místo / bin. Kromě toho je tu ještě jedna věc zde. Pokud stačí použít znak libry bez vykřičníkem a cestu ke složce, , že by mělo být uvedeno C-shell. Nicméně, já nedoporučuji dělat to, protože nejsem schopen zaručit že bude vždy fungovat. Chcete-li C-shell, že by bylo lepší, aby to tak říct. Pak je tu něco, co spíše matoucí zde. Pokud používáte shell specifikátor linii, jako je / bin / bash a že shell není k dispozici tam, tam žádná taková věc jako / bin / bash na daném počítači, a to buď proto, že nemá Bash, nebo proto, že je v jiném místě, dostanete chybu oznamující, že skript, který běžel neexistuje. A samozřejmě váš skript existuje, takže chybová zpráva je zavádějící. Důvodem, že operační systém vám dává tuto chybu nebo, přesněji, že interaktivní shell, ve kterém je spuštěn dává tuto chybu, je, že se hlásí příkaz, který jste použili, což je název skriptu. Tento příkaz efektivně nazývá shell jménem skriptu. To je místo, kde můžete dostat, že matoucí chybové hlášení. Dalším způsobem, jak volat skript je zadáním shell na příkazovém řádku, jak je zde. To je příkaz. To říká, že běží Bash a pak spustit svůj skript v bash. To bude mít přednost před specifikátor linie, a to má funkci umožňuje stanovit různou cestami. Pokud jste právě dát příkaz, bude operační systém hledat pro tento příkaz na různých místech. Pokud je k dispozici, mělo by to najít. Počítač najde Bash všude tam, kde je umístěn, a spusťte jej, takže nemusíte pak mít obavy o tom, kde je najde. Existuje případně další otázky zde, jako v případě, že je více než 1 Bash, což je možné, i když nepravděpodobné. Takže to je další způsob, jak se vypořádat s těmito věcmi. Specifikátor linky můžete volat jakoukoliv shell. Mohou také volat jiné než skořápky věci. Příklady mám zde sed, což je proud editor; awk, což je jazyk pro zpracování vzor; a perl, velmi vysoce rozvinutý skriptovací jazyk. Pokud dáte specifikátor linii označující jeden z těchto programů na začátku, půjde přímo do tohoto programu spíše než spuštění shellu. Tyto programy mají meze svých schopností. Perl je velmi schopný. Sed je editor. To může dělat než jen úpravou věci. Ale to může být obtížné naprogramovat, že. Kromě toho, předávání argumenty a tak se skript je buď nemožná, nebo matoucí. Takže v těchto případech, s awk a sed, to je, alespoň podle mých zkušeností, vhodnější napsat shell skript a volání awk nebo sed z shell skript spíše než volání awk nebo sed jako skript specifikátor řádku. Perl je vysoce diverzifikovaná jazyk, jak jsem řekl. Nelze spustit interaktivní příkazy v perlu, což znamená, že nemůžete testovat části skriptů, které jste rozvojové tím, že je interaktivně. Nicméně, je to velmi schopný jazyk a se vyvinul do velmi široce používaný nástroj. To je jen trochu v závorkách poznámku o specifikátor linek. Ve všech nebo většiny forem Linux - opět, nemohu být jistý, že je vše - a Mac OS, pokud jste typ csh dostanete tcsh, a pokud zadáte sh dostanete bash. Snažili se, aby vám ty pokročilejší verze těchto granátů, ale to může být matoucí. Máte-li napsat skript pomocí tcsh nebo Bash je k dispozici při volání csh nebo sh a pokuste se jej spustit v počítači, který nemá tcsh nebo Bash, můžete získat nějaké chyby, pokud existují příkazy tam které tyto granáty neuznávají. Kromě toho, můžete si vyvolat shell na lokálním počítači volání jako sh nebo csh a pak se dostat na pokročilejší shelly. Nesmíte ani myslet na to, že jste pomocí více Advanced Shell. Tak to je potenciální úskalí. Jak je prokázáno, že pokud zadáte sh vám Bash, Pokud zadáte csh dostanete TSCH? Existují věci, které v těchto počítačích volal odkazy které lze připojit k souboru jména se odkazovat na stejnou věc. To může být buď 2 názvy pro stejný nebo jiný soubor, jehož cílem je poukázat na jiný soubor. Jsou to tzv. pevné a symbolické odkazy. Nebudeme jít do toho už dnes. Tam může být také samostatné soubory - 1 soubor sh, 1 soubor Bash - ale oba běží Bash. Pak je tu ještě jeden kvalifikátor zde. Pokud voláte jeden z těchto mušlí jedno jméno, byste si mohli myslet byste si stejnou funkcionalitu jako volat to pod jiným názvem. No, to vlastně není nutně pravda. Tyto příkazy můžete prohlédnout na jméno o němž se říkalo a mohou na základě tohoto názvu, se chovají odlišně. Tam mohou být otázky se snaží odpovídat standardu. Někteří z vás možná slyšeli o standardu POSIX nebo jiný, možná další funkce. To může být vybrán někdy argumenty příkazového řádku nebo nastavením proměnné shellu. Volání jako sh nebo bash, může skutečně vést k odlišnému provedení i když je to stejný soubor, který jste provádění. Další věc, aby zvážila, že i když jiný počítač má tcsh nebo Bash, pokud nejsou spojeny, jak jsou na lokálním počítači Máte-li Linux nebo Mac OS místního počítače, pak zase budete mít shell, který vám volat sh nebo csh, a ne ten, který byste mohli dát přednost. Aktuální Bourne shell má vylepšení menší než v Bash ale za ty, v původním Bourne shell. V důsledku toho, i aktuální Bourne shell, sh, i když to není Bash, podobá se jazyk C více, než C-shell dělá. To nebyla pravda, když byl C-shell nejprve vytvořil, ale vyvinula tímto způsobem. Můžete si všimnout, tady, že všechna tato jména shell s výjimkou Bourne shellu něco pro indikaci, které shell jsou - csh, bash - ale Bourne shell je jen sh. Proč? To byl původní shell. Bylo to shell pak, ne shell, a od té doby to byl shell, tam byl žádný důvod, aby ji odlišil od jiného shellu. Takže to je důvod, proč má tento název a stále dělá. Tento top je zde řada z databáze hesel pro účet mám tam na jiném počítači. Budu se snažit, aby se to jméno, takže můžete vidět, že část na konci, shell. Databáze heslo drží přihlašovací vlastnosti pro všechny uživatele. Na začátku je uživatelské jméno, které můžete vidět poslední dvě písmena dolu teď. Pole jsou zde odděleny dvojtečkami. Poslední pole, jak můžete vidět, je bin / tcsh, shell. To je shell specifikátor. Je tu něco zajímavého zde. Když Unix byl nejprve vyvinut, byl tam jen jeden shell, takže tam nebyl žádný výběr. Tak proč se jim umožňují pole v databázi hesel zadejte shell? Nevím, ale je to štěstí, že oni dělali. Je to dost těžké, aby se změny v databázovém formátu heslo protože mnoho programů naleznete na jeho formát a bude muset být přepsán. Je to vhodný nebo náhodné vývoj, že součástí této oblasti. Tento druh souboru heslo řádku se používá na všech počítačích Unix a Linux, takže pokud vím. Mac má svůj vlastní systém. To má ve skutečnosti soubor s hesly s linkami v tomto formátu, ale to není tam, kde jsou definovány uživatelské vlastnosti. Další vsunutá poznámka tam. Pokud voláte shell, můžete volat jako sub-shell vašich stávajících mušlí. Takže když jsem se jít sem, pojďme se zbavit těchto věcí. Tady jsem v C-shellu. To je veličina, která přesně identifikuje svou skořápku, ve skutečnosti není vždy spolehlivý způsob, jak určit, co shell vedete, ale v tomto případě to je. Co když jsem typ - Teď jsem v Bash. Některé věci se bude stejný. Je mi říká mé příkazy. Pokud bych se pozastavit zpět do mého C-shell, LS, stejně. Je to tak? fg, popředí, zpět do mého Bash shellu. pwd, aktuální adresář, zpět na C-shell. pwd, jiný adresář - vlastně ne jiný adresář, v tomto případě. Je to stejný adresář. Řekněme, že chci, aby tu zavolat příkaz: kde ls. Co to bylo? To mi říká, kde příkaz ls, ten, který mi dává výpis adresáře, se nachází v ls. Vraťme se k Bash shellu. Zkusme to samé. Hmm, tam zajímavé, kde: command not found. Proč je to tak? Kde příkaz je postaven do C-shell. To není příkaz, který má být čten v paměti někde jinde a popraven. C-shell spustí jej přenosem výkonu na části vlastního kódu a to není v Bash shellu. Takže Bash, které nemají takový vestavěný příkaz, hledá to, nenajde ji, a dostaneme chybu. Takže tam máme Bash shell běží pod C-shell, a říkáme, že sub-shell. A právě v případě, že jste zvědaví, Bash shell má svůj vlastní způsob, jak lokalizovat příkazy. hodnotu hash odkazuje na skutečnost, že může být provedena rychleji, bylo nalezeno více rychle. To je jeden z vylepšení postavených v některé z těchto mušlí. Bourne typu skořápky jsou přednostní pro programování. Mají kontrolní struktury, jako jsou smyčky, podmíněné příkazy, druh příkazů, které můžete použít v programovacích jazycích jako C nebo cokoliv jiného jazyka. Možná, že jste programování v jazyce Java nebo cokoliv jiného. Mušle jsou ty taky. V Bourne typu skořápky, zejména Bash, více a jsou navrženy s větší flexibilitou. Bash shell má pole. Původní Bourne shell není. Takže to může být značně výhodný pro programování. C-shell vlastně dělá má pole, ale nemá mnoho z těchto dalších funkcí. V Bourne typu skořápky budou provádět rychleji v případě, že nemají vlastnosti určené pro interaktivní použití. Můžete nahrát věci dolů pro jeden účel, to načte je dolů k jinému účelu. Tam je, že existuje trade-off. Tyto vlastnosti, které jsou určeny pro interaktivní použití opravdu malou nebo žádnou použití pro skriptování. Je možné použít interaktivní sub-shell, stejně jako ten, že jsem začal vyzkoušet příkazy, které chcete použít ve skriptu. To je to, co nemůžete udělat s perl. Můžete to udělat s granáty. Dokonce i struktury jako pro smyčky a tak dále lze spustit interaktivně. Jsou užitečné pro občas interaktivně, ale více pravděpodobné, že používáte jim rozvíjet skript. Aliasy. To bude asi C-shell. Historie mechanismus, kde se dostanete zpět do dřívějších příkazů nebo jejich části, které jste již spustili. Opět platí, že o C-shell, shell Bourne a Korn shell mají tyto věci, ale nehodlám se dostat do nich. Takže tady jsou některé užitečné aliasy, které mám. Místo psaní ls - je to běžný příkaz - jen typ L a ušetřit 1 znak. ls s různými možnostmi, všechny ty práce. Všimněte si, že tyto definice mají uvozovky kolem nich. V těchto případech, uvozovky nejsou nutné. Pokud můžete definovat ty aliasy bez uvozovek, to by ještě fungovat. Jsou doporučovány. Existují situace, ve kterých nelze použít na nabídku protože chcete, aby se něco stalo, který citát by se zabránit. Někdy můžete citovat část definice, ale ne všechny z nich. Je také obecně doporučuje používat apostrofy spíše než dvojité uvozovky. Uvozovky mají vliv na definice proměnných, zejména způsobuje, že mají být hodnoceny, než zastavit. Proč bychom se zastavit hodnocení? A jak se citace udělat pro nás? Tady je příkaz, který jste mohli najít zajímavé. "Ls g *" g *, jak asi víte, je zástupný výraz pro všechny názvy souborů začínající g. Kdybych jen napsat na příkaz ls g *, budu si seznam všech těch jmen v mém aktuálním adresáři. Mám-li definovat, že alias, jak je to tady s citacemi, to bude fungovat, že příkaz v aktuálním adresáři, kam to běží. Ale pokud spustíte definici aliasu bez uvozovek, bude vyhodnocovat zástupný g * při spuštění tohoto definující příkaz. Takže definice aliasu bude ls následuje seznam souborů v adresáři ve kterém příkaz alias se spustí, bez ohledu na to, kde jste skutečně v úmyslu spustit příkaz. To není k ničemu, a jednoduché uvozovky předcházet vyhodnocení hvězdičkou. Takže stačí dostat definice bytost ls g *. Potom při spuštění aliasu, LGS, pak dá to ven. Nyní nejsou žádné citace, a to bude vyhodnocovat hvězdičku při spuštění příkazu alias. Takže to je jedna věc. Uvozovky bude mít ten stejný efekt zde, ale existují i ​​jiné případy, kdy dvojité uvozovky nebude fungovat tak dobře. Tady je ještě jeden. Možná víte, příkaz grep. Příkaz grep může být použit ke kontrole souboru řádky, které mají některé řetězce. Takže pojďme sem a budu opustit mé Bourne shellu. Dobře. Zde je soubor. Řekněme, že je to grep abc řetězce. Tady to je. Pokud se mi grep zddd, jsem si nic. Dobře. Tak to najde řetězec, hlásí, že nenajde, není to nahlásit. To výstupy libovolný řádek, který má tento řetězec na něj. Tam jsou všechny druhy možností, které zde můžete nalézt v dokumentaci. Tady je jeden způsob, jak to udělat. Co o této jedné, alias grabc "grep abc"? To bude zahrnovat jeden argument, když je definován alias. Takže pokud jsem to udělat tady, teď když to udělám grabc, Nyní alias obsahuje více než jednoduchým příkazem. To je také argument. Zatím to funguje. Mám jiný příkaz tady, tuhle, tak ty jsou různé řetězce tam a ukázat, že to není nic, co by tam, protože to neodpovídá. Co když budu chtít zahrnout do definice aliasu soubor, který Jdu hledat a chci dát jako argument alias řetězec, který jsem hledal? Bych chtěl říci, abc jako argument k mému alias, ale alias již stanoven soubor. A to je místo, kde tento výraz vypovídací Všimněte si, zde máme grep, stejně jako předtím. Máme soubor zde, řetězce. \! ^, Trochu zvláštní výraz, myslím, pokud jste ho ještě neviděli předtím. Vykřičník je součástí historie mechanismu C-shell. To může vyvolat předchozích příkazů, může vyvolat argumenty těchto příkazů, a tak dále. Mechanismus historie se používá jako součást aliasingu. Pokud zadáte řádek po vykřičník, bude odkazovat na tento řádek v seznamu historie, které nebudeme se dostat do teď, protože je to úplně jiný téma. Je možné zadat část linky. Takže! 03:02 bude druhý argument z příkazové číslo 3. Stříška zde v tomto výrazu je zkratka pro první argument. Pokud nechcete, aby to označení, které příkazu máte na mysli, se vztahuje k bezprostředně předchozí příkaz, a stříška je symbol pro první argument. Vzhledem k tomu, že je stříška a ne číslo, nemusíte používat tlustého střeva, tak! ^ znamená, že první argument na předchozí příkaz. Trochu popletl zde. V tomto případě, když se použijí jako definici aliasu, reference historie odkazuje na příkazy, v nichž se používá alias. Tak to se vrací 1 příkaz jako operace historie, ale jako operace alias odkazuje na příkaz, ve kterém byste zadali, říci, grstrings_file. Máme uvozovky zde v něm. Co je zpětné lomítko pro? V tomto případě, stejně jako kdekoliv jinde, nechceme spouštět mechanismus historie při definování alias. Pokud bychom neměli zpětné lomítko tam, shell by vytáhnout v prvním argumentu příkazu těsně předtím, než ho spustili tento alias příkazu, což nechceme. Chceme, aby to bylo postaveno v příkazu alias volat na argumentu později. Jednotlivé citace neunikli vykřičník, odkaz historii. Možná víte, že výraz útěk znamená změnit význam něčeho. V tomto případě, to znamená, že se něco zastavit od mít zvláštní význam. Zvláštní význam vykřičník je historie. Útěk a nemá to smysl. Citáty nedělejte to, zpětné lomítko dělá. Takže jsme vlastně pomocí 2 úrovní uniknout zde. Chystám se přesunout tento příkaz do jiného okna, aniž by napsáním pomocí těchto editačních operací, které můžete najít užitečné. Něco, co tu ještě ukážu vám. Pokud stačí zadat alias bez argumentů, to vám řekne všechny své argumenty. To je banda aliasů už jsem tady měl kromě těch, které jsem používal dnes. Ale když jsem typ s názvem aliasu, to mi říká, co to znamená. Všimněte si, že uvozovky jsou pryč a zpětné lomítko je pryč. Tento řetězec je zde výsledkem této definice aliasu, a teď to má jen! ^ v něm. To bude vypadat v řetězcích souborů pro cokoliv. Takže pokud jsem to grstrings_file řetězce, nechtěl jsem, aby to nic hledat tam, ale to vypadá v řetězcích. To nenašel slovo řetězce v řetězci souborů, ale to se najít abc. A to nenajde to. Tak tady dáváme argument, který zasáhne do definice aliasu, , která je vložena do něj. To je místo, kde tento výraz pochází. Můžete použít více než jeden. Stříška je symbol pro první argument. Pokud byste chtěli použít druhý argument, byste pak řekl: 2. Neexistuje žádný speciální symbol pro druhý argument. A protože jste pomocí číslice, měli byste použít dvojtečku. Tam je, nicméně, další možnost zde. Znak dolaru stojí za poslední argument. A protože je to symbol, můžete vynechat dvojtečku. Tak to by bylo poslední argument v seznamu. A je tu také, že jeden. Hvězdička znamená, že všechny, takže to je kompletní seznam argumentů, a znovu, můžete vynechat dvojtečku, protože to není číslice. Doufám, že jste všichni pozorovat všechno. Mechanismus historie může vrátit do dřívější řádky v seznamu historie. Dalo by se to udělat v definici aliasu. Nikdy jsem neviděl to udělat. To by mělo za následek vytahování dřívější příkazy ze seznamu historie Při spuštění alias, které by mohly být různé příkazy v závislosti na tom, kdy a kde jste jej spustit. Tím pádem budete chtít vytáhnout takový odkaz Jen vědět, co dříve byl příkaz. Nikdy jsem neviděl to stalo. Myslím, že by někdo mohl chtít, ale je to velmi nepravděpodobné. Tam je další věc, kterou zde. Pokud použijete tuto historii, typové označení, pak jsou použity pouze argumenty, které tam je takový odkaz. Máte-li definici aliasu, který nepoužívá odkaz historii typu, v případě, že se stane jen začátek příkazu a máte další argumenty, pak něco napíšete, že po bude přidána do příkazu. V tomto případě, příklad jsem tam dal, jsme použili první argument; jsme nepoužili žádné jiné. Kdyby byla dána další argumenty na příkazovém řádku, které by neměly být používány. Takže pokud použijete odkaz historii vůbec, pak musíte použít, aby se žádný argument. Je tu další věc, kterou zde chci jen zmínit, částečně v závorkách, a to, že tato historie mechanismus s vykřičníkem vrátí do původního C-shell. Tcsh představil historii operací které používají nejrůznější příkazy a řetězce z redaktorů, buď Emacs nebo vi. Můj osobní názor je Emacs je mnohem jednodušší použít pro tento účel i když vi použít pro své pravidelné úpravy. Existují různé Emacs příkazy, které jsou nyní upraveny v historii. Ovládací P dostane předchozí řádek v seznamu historie. Další Control P se dostanete ten před tím. Šipka nahoru dělá totéž. Ovládací N dostane další příkaz, pokud jste již posouvat zpět některé způsoby. Šipka dolů dělá to taky. Můžete se pohybovat zleva doprava s šipkami a různé jiné věci. To mohou využít mechanismu historie mnohem jednodušší, než pomocí bodu syntaxe vykřičník, ale nebude používat, že v definici aliasu. Půjdeme přes to někdy jindy. Proměnné. Víš, co proměnné jsou v programovacích jazycích. Nábojnice je mít také. C-shell používá příkaz set přiřadit proměnné, tak, že nastaví proměnné A na hodnotu b - jak už jsem řekl, k ničemu definici, ale ilustraci toho, jak je tento používán. Příkaz set vytvoří proměnnou, pokud již neexistuje. Poziční parametry pro shell skriptů lze považovat za proměnné, ale využití z nich, a pravidla pro ně jsou poněkud odlišné. Nemůžete přiřadit hodnotu $ 1 v průběhu skriptu. Budete muset definovat novou proměnnou pro tento účel, pokud někteří z vás chtěl. Zadejte sada bez argumentů a dostanete seznam všech aktuálně definovaných proměnných. A pojďme na mé další shell tady a uvidíme, co dostaneme, pokud budeme dělat, že. Poměrně dlouhý seznam tam, že jo? Vyberte si trochu. Podívejte se na vše, co. Některé z těchto věcí jsou automaticky definovány shellu. Skořepina vytvoří proměnnou a dává mu hodnotu. Některé z nich jsou definovány pláště, ale pak se znovu definovat uživatel podle svých preferencí. A některé z nich jsou vytvořeny uživatelem v závislosti na tom, co dělá, že den. To je jen nastavit bez argumentů. Je tu zvláštní vlastnost tady na téhle věci. Tam musí být mezi rovnítka a název proměnné buď bez mezer a hodnotu nebo prostory na obou stranách rovnítka, jako v tomto jednom. To nebude fungovat, a to je vlastně platný příkaz ale to nebude dělat to, co máte v úmyslu. Tento příkaz bude fungovat, protože pokud jste právě říkají, nastavit a názvu proměnné s žádné rovnítko, nebo nastavit, a název proměnné s rovnítkem a žádná hodnota, bude to nastavit proměnnou na hodnotu null. Takže nastavení = je platný příkaz. Příkaz set lze definovat více než 1 proměnnou na stejném řádku. Takže tento příkaz zde má vliv na definování A i B na hodnoty null. Pravděpodobně není to, co chcete. Tenhle tady bylo zmíněno dříve, povede k chybě protože = b není platný výraz. Název proměnné nesmí začínat znakem rovnítka. A tam jsou ty další věci tady. V dvojtečky byly použity pro výběr argumentů z historie linek, a mohou být použity - a já jsem nešel do před - měnit ty věci. Mohou být také použity k úpravě shell proměnné. Tenhle, $, má hodnotu. : R bude startovat rozšíření. Rozšíření bude něco po bodu, dot a něco po ji na konec souboru, pouze na konci seznamu po posledním lomítkem. Tak jsem si to tady. je to, že. To bude klesat. O. Pokud není rozšíření, pouze cestami po posledním lomítkem, bude to mít žádný vliv. : h, že proměnná výraz, bude startovat poslední prvek seznamu adresářů, opět až po posledním lomítkem. So / a / b / c se / a / b, ale tohle se změní, protože prvek po seznamu je null. Zde je něco, co chci také zdůraznit. Tyto kvalifikátory nemají hledat existenci těchto souborů. Oni se jen podívat na řetězce. Ty jsou určeny k manipulaci s názvy souborů, cestami, ale mohou být použity na jakýkoli řetězec, i když to není název souboru. A oni nevypadají na existenci, takže v případě, že to není takový soubor, / / ​​b / c, to bude ještě pracovat. Ať už je to k ničemu, je jiná otázka, ale to bude ještě pracovat. Proměnné jsou odlišné ve skořápkách Bourne. K tomu se dostaneme později. Znak dolaru lze zrušit stejně jako vykřičníkem a hvězdičkou. Znak dolaru může být unikl s lomítkem nebo apostrofy. Uvozovky mají podivný účinek ve všech mušlí nutit hodnocení dolaru podepsat variabilní exprese. Takže pokud to je unikl jeden způsob, jak je možné, že dvojité uvozovky mít za následek způsobit, že mají být hodnoceny stejně. To je trochu matoucí. Pokud existuje více úrovní uniknout, jako je například apostrofy uvnitř uvozovek nebo dvojité uvozovky uvnitř apostrofů, měli byste vyzkoušet, aby viděli, co se bude dít proměnné, pokud používáte jeden. Tyto dvě situace - dvojitý uvnitř z jednoho, jediného vnitřní dvojitý - nemusí nutně dát stejný výsledek. Proměnné prostředí, vázané C-shell proměnné. Proměnné prostředí jsou také proměnné v C-shellu, a jsou také proměnné v jiných mušlí taky. V C-shell, jsou odlišné sady. To, co jsem říkal předtím, než se o proměnných shellu. Proměnné prostředí jsou zřetelné soubor proměnných s výjimkou několika proměnných, které nazýváme vázané proměnné, které jsou velmi důležité a budeme se dostat do těch později. Proměnné prostředí jsou automaticky předávány do skořápky nebo příkazy, které jsou spouštěny z vašeho shellu. Ostatní věci nejsou. Proměnné shellu, aliasy nejsou. Proměnné prostředí jsou. To je důvod, proč jim říkáme proměnné prostředí, Myšlenka je, že životní prostředí rozšiřuje minulosti jen vaše aktuální shellu. Mohou být použity pro definování věci příkazy. Zde je příklad. PRINTER, LPDEST. Obě tyto proměnné lze definovat tiskárnu, která příkaz bude používat k tisku věci. Pokud máte více tiskáren kolem sebe, možná budete chtít, aby se vám líbí. Důvod, proč máme 2 proměnných je to, že byly napsány různé sady příkazů Pomocí těchto různých proměnných. Dalo by se jim různé hodnoty. S největší pravděpodobností budete jim oba stejnou hodnotu. Tyto věci fungují, protože příkazy, které dělají tisku byly naprogramovány tak, aby zkoumat hodnoty těchto proměnných. Pokud program nepsal takhle, kdyby bylo napsáno něco jiného, proměnná bude irelevantní. Takže operační systém se nedívá na těchto proměnných pokaždé, když se odkazují na tiskárně. Příkaz, který dělá tisk hledá těchto proměnných, pokud je naprogramován tak. Tyto proměnné jsou často definovány ve svých konfiguračních souborech , ale ne nezbytně. Můžete definovat je na příkazovém řádku. Mohou být definovány v příkazu. Příkaz, který spouští něco, co může mít svůj vlastní výběr proměnných - proměnných, které jsou specifické pro konkrétní softwarový balík, například. Budou definovány při spuštění balík. Jak jsou tyto proměnné předávány sub-shell? Když je napsán sub-shell, to nezapisuje do této oblasti. Oblast sub-shell, který je věnován proměnných prostředí není napsaný sub-shell, to napsal kopírování. Při spuštění obyčejný příkaz, jako například tyto příkazy vytisknout nebo cokoliv, se začít tím, že vytvoří nový shell. Skořepina vytvoří shell a pak přepíše jeho část s příkazem, že jste se systémem, který je trochu matoucí, ale to, jak se tyto příkazy získat proměnné prostředí které pak odkazují na později. Příkaz zde pro definování proměnné setenv. To je, jak to definovat. Je to 3 prvky: setenv, variabilní, hodnota. Pokud jste prostě setenv bez argumentů, co dostanete? Seznam všech těchto proměnných. Opět, je to pěkný dlouhý seznam, a v tomto případě, stejně jako v ostatních, Tyto proměnné jsou definovány převážně mého přihlášení provozu samotné nádrže spíše než cokoliv, co jsem udělal. Je tu další příkaz tady, printenv. To také vytiskne na životní prostředí. Všimněte si, to poslední, co zde, EDITOR = vi. To říká, že pokud budu používat něco, co volá editor a já neurčíte editor a umožňuje mi na výběr, může mi dát vi. Co když udělám printenv EDITOR? To mi říká, že to, co to je. Těsně předtím, než to, že tam byl variabilní, LESS. To jsou vaše možnosti výchozí hodnoty, když jsem spuštění MÉNĚ příkaz, který zobrazuje soubory. Takže když jsem to udělal, printenv může trvat jeden argument nebo 0 argumenty, ne více než 1. Existují i ​​další příkazy také, ale nebudeme se dostat do vší té dnešní. Pamatujte si, že byly modifikátory pro proměnné shellu jako: h, které klesne na poslední prvek cestu ke složce, nebo: r, což sníží rozšíření. Ti, kteří nyní platí pro proměnné prostředí příliš. Oni nejsou zvyklí. To bylo, že nemůže být modifikován. Nyní mohou být. Je to jeden ze záloh s vývojem skořápek v průběhu let. Říkal jsem, že skořápky jako součást prostředí, a shell proměnné v C-shellu jsou, až na některé výjimky, různých sad. Můžete vytvořit proměnnou prostředí a shell proměnnou se stejným názvem. Budou různé proměnné, které mohou mít různé hodnoty. Změna hodnoty jednoho nezmění hodnotu druhé. Tyto proměnné jsou hodnoceny s znak dolaru - $, $ cokoliv. Takže to, co máte tohle? Víte, který z nich dostanete? V mých testech jsem proměnnou shellu, ale to není zdokumentováno a můžete se spolehnout na to. Tak jsem se vás zeptat, je vytváření shellu a proměnné prostředí se stejnými názvy dobrý nápad? No jo. Jaké jsou ty hlavní výjimky, které životní prostředí a proměnné shellu jsou navzájem propojeny? K dispozici jsou tyto 4. Velké písmeno TERM proměnná prostředí, shell variabilní termín malými písmeny, typ emulace terminálu. Jen jsem jít sem, a budu dělat ozvěnu, užitečný příkaz tady, $ TERM $ termín. A tam. xterm je typ terminálu pro okna zobrazená v X Window System. xterm-color je varianta, že umožňuje různé barvy. Proč bychom definovat ty? Co je to dobré? Příkazy, které změnit uspořádání obrazovky, podobně jako v editoru Poslat konkrétní sekvence, tzv. escape sekvence, na terminálu nebo v okně, aby se uspořádání, a tak dále. Tyto sekvence jsou různé pro různé typy terminálů. To je, které z nich použít řekne. Někdy tam jsou problémy tam. Možná budete chtít změnit. Pokud věci nefungují, někdy i typ terminálu je nastaven špatně, můžete být schopni opravit předefinování pojmu proměnné. V těchto případech, změna jedné proměnné, proměnné prostředí nebo proměnné shellu, by se mělo změnit na druhou. Zjistil jsem, na základě zkušeností, které mění výraz v velkými písmeny nemusí vždy změnit shell proměnnou termín malými písmeny. To je chyba. Nevím, jestli je to vždy pravda. Většinu času to není pravda, ale to může být. Takže pokud uděláte změnu, stačí zkontrolovat, že ven. Nestává se často, že budete muset změnit tuto hodnotu, ale jednou za čas, co děláte. Proměnná prostředí USER. Opět platí, že proměnná prostředí hůlkovým písmem, shell proměnné malými písmeny. Toto je vaše uživatelské jméno. Je to pouze za velmi výjimečných okolností že byste chtěli změnit. Pokud je vaše uživatelské jméno je někdo jiný, je možné házet všechny druhy věcí pryč. Domovský adresář, domovský adresář uživatele. Opět platí, že byste nechtěli změnit. Všimněte si, ve všech těchto případech a ten, který se chystáme na pokrytí proměnné PATH, Proměnná prostředí je velkými písmeny a vázaná proměnná shellu je malými písmeny. Změníte-li jeden, měli byste změnit jiné. Tento druh vazby nelze stanovit, protože není možné svázat dvě proměnné, jiné než ty 4 a závazné v těchto proměnných nelze vrátit zpět, nelze oddělit. Takže tyto čtyři párů proměnných jsou vázány. Vždycky bude. Žádné další bude. Kromě toho by mělo být možné vytvořit proměnné se stejnými názvy z opačných typů. Dalo by se udělat shell variabilní termín malými písmeny nebo proměnná prostředí TERM velkými písmeny. Tyto proměnné by být nezávislý na těchto párových proměnných a že by se na sobě nezávislé. Nedovedu si představit, proč byste si, že pokud chcete mást lidi. Tenhle, variabilní cesta, je to opravdu důležité. Další věc je, že tam mohou být případy, proměnných s podobnými spárován názvy, které nejsou vázány na sebe. Tam mohou být proměnné, SHELL a shell, velkými a malými písmeny. Na tomto základě jména, nevíte-li, že proměnná je proměnná shellu nebo proměnné prostředí, a že to není vázán k sobě. Takže tento druh párových jmen neznamená vázaných proměnných. Proměnná cesta, kterou jsem se před zobrazením, je seznam cestami, ve kterých shell hledá příkazy. Pojďme se k tomuto oknu tady a budeme dělat echo $ PATH, velká písmena - Proměnná prostředí - echo $ PATH, malá písmena - shell proměnné. Všimněte si, že seznam adresářů je stejný. Ty jsou vázány. Změna jednoho, můžete změnit další. V proměnné prostředí jsou prvky odděleny dvojtečkami. Všimněte si, že. Proměnné shell jsou odděleny mezerami. Tato proměnná prostředí je jeden řetězec. Proměnná prostředí je pole. Bourne shell neměla pole. Bash dělá, ale to je již pevnou součástí pláště. To je jediný řetězec, a ne pole. C-shell vždycky pole. Tato pole jsou mnohem jednodušší pracovat. Můžete odkazovat na její části. Takže echo $ path [1], a dostanu / usr / bin, první prvek. Opět, nezapomeňte dolar znamení je zkratka pro poslední prvek v seznamu historie. Co se tam děje? Snažil se najít znak dolaru jako variabilní symbol. I uniknout. Chybička se vloudila. To by se, že buď. Některé z těchto věcí nefungují tak dobře. Možná, že budeme jen tak nechat, že ven. Asterisk se vztahuje na celou věc, ale to je to, co dostanete, pokud neurčíte prvek. Dalším způsobem, že proměnné pole lze manipulovat, Počet prvků tam, 7 prvků. Zde jsme dát křížek před názvem proměnné. Tady je ještě jeden. Dejte otazník tam. To je logická hodnota. To znamená, že proměnná existuje. Je to další způsob, jak pracovat s proměnnými. To, mimochodem, nemusí být proměnná pole. To by mohlo být libovolná proměnná. A když to udělám, že žádná taková proměnná, a já si 0.. Další maličkost, že o variabilní hodnocení. Zpět na tenhle tady, pokud z nějakého důvodu chtěl pracovat s tímto spíše než pracovat s poli, variabilní shell, tam jsou příkazy, které lze oddělit tyto věci na základě tlustého střeva. Ve skutečnosti, pokud budete dělat to v Bash shellu možná, nějaký skript, který by pravděpodobně, jak byste to udělat. Ale v C-shellu, že je mnohem snazší použít pole. V Bourne shellu, proměnné jsou přiřazeny jediným výrazem, jako je tento, jako způsob, jak byste mohli přiřadit proměnnou v programovacím jazyce, a sem tam nesmí být žádné mezery. Je to nutné, aby to bylo jen 1 řetězec. V Bourne typu granátů, všechny proměnné jsou proměnné shellu. Proměnné prostředí jsou podmnožinou proměnných shellu. Oni jsou rozlišováni od proměnných non-prostředí exportem. Příkaz k tomu, že je export, stejně jako export tiskárny. Pokud bychom měli definovat takové proměnné, pokud bychom chtěli tiskový příkaz, aby ji najít, mělo by to být proměnná prostředí, a to jak z něj dělá jeden. Tady je něco trochu matoucí. Tento výraz, export do životního prostředí, pochází z této Bourne shell koncepce, a přesto, že výraz se používá v popisu C-shell, tam, kde žádný takový příkaz jako export. Pokud jste právě řekl vývoz sám o sobě, dostanete seznam exportovat - Takže pokud jsem to export tady, nic takového. Dobře, jdeme na to. Tyto věci, mimochodem, jsou také definovány shellu. Nechtěl jsem definovat některý z nich sám. Shell dělá spoustu věcí sám. Je třeba dělat věci automaticky. V Bash nebo Korn shell, můžete spustit příkaz jako je tento, které se oba dát proměnnou hodnotu a exportovat je v 1. příkaz. V Bourne shellu mají být samostatné příkazy, jako je exportovat. Zde je další aspekt, který je matoucí. Příkaz set v C-shellu definuje proměnné a bez argumentů vám řekne, co se hodnoty proměnných "jsou. V Bash shellu, soubor příkaz bez argumentů dělá totéž, ale s argumenty, že dělá něco docela jiného. Tak to jsou různé argumenty zde. Některé z nich jsou proměnné prostředí, některé z nich jsou proměnné shellu. Všechny z nich jsou opravdu proměnné shellu. Některé z nich jsou proměnné prostředí. Příkaz set s argumenty lze použít k ovládání na poziční parametry skriptu, což je způsob, jak je všechny najednou. Nemůžeme opravdu jít do toho dnes. To může být také použit ke změně chování shell. Zejména v Bash jsou proměnné, které budou určovat, jak shell chová. Pak také jen tento jeden příkaz, který jste mohli vidět, tento příkaz. Vysázet následuje proměnné a typy proměnných se používá v Korn a bash. Není to povinné, ale může být použit pro omezení hodnoty proměnných, které mohou být užitečné, aby se zabránilo chybám, a je to docela běžné. Takže jsem jen zmínit, že v případě, že jste ji vidět někde. Příkaz kde. Vzpomínám si, jak již bylo zmíněno, kde příkaz v C-shellu, které vám říci, umístění příkazového název cesty. Zde je substituce příkazu. Měli byste najít na vaší klávesnici někde znak, který vypadá takto. Umístění na klávesnici se bude lišit. Nazvali jsme ji backquote. Je to o velikosti cenovou nabídku. To jde z levé horní části na pravé dolní. Tady na mém Mac klávesnice je v levém horním rohu. Tento znak může být použit k provedení příkazu v rámci příkazu. Máte-li výraz uvnitř jednoduchých zpětných uvozovek, že výraz je příkaz, je to běh. Výstup tohoto příkazu se pak nahradí celou backquote výraz v delším příkazem, který pak běží s tímto výstupem jako součást svého řetězce argumentů, a tak dále. Zde je příkaz, který používá to. Pojďme si ukázat provoz zde. Pojďme sem, vyjměte jednoduchých zpětných uvozovek. Řízení mě dostane na začátku řádku se syntaxí úpravy Emacs. Zatím cestami je to, co kde dělá, ale když jsem to takhle, pak se zapojuje v tomto seznamu cestami místo celé této backquote projevu a běží ls-l na nich. Druh pohodlné, co? Takže to je jedna užitečná věc. To je, jak jednoduchých zpětných uvozovek pracovat. Nyní pojďme se trochu dál. Jedná se o aliasy. Já vlastně používat. Budu se snažit, aby si na tuto 1x úpravy provozu. Dobře. Nyní se pojďme podívat, jak tyto definice vyšel. alias DxŠxV mi říct, jak je to definováno. Všimněte si, že je to právě to, ale vnější citace byly vzlétlo a vykřičník se vzlétlo. ! *, Úplný seznam všech argumentů. V definici aliasu, bude platit tam, kde jsem se použít. lwh ksh bash. Dobře. Podívejte, jak to funguje? To mi ušetří trochu psaní. Pojďme se trochu jen zmínit něco jiného zde. Všimněte si, tyto různé mušle. Měl jsem se zmínil dříve. Csh má 2 nad tu, a tak se / bin / tcsh. Mohli bychom vytvořit jinými prostředky, že jsou to vlastně stejný soubor. Vzpomínám si, jak říkal, napíšete-li sh máte bash. Opište tento kód, a dostanete to. Ale ty nejsou propojeny. Ti, kteří mají jediné ty tam. A to není typ souboru, který může volat jiný. Takže to jsou samostatné soubory, na C-shell z nich jsou stejný soubor. Tady zpátky, druhý zde, tento alias, Upozorňujeme, že se spuštěním tohoto příkazu, soubor. To alias běží to. Soubor vám řekne, typ souboru. Takže FWH ksh bash. Dobře. To je výstup příkazu souboru. Nevím, jestli víte, co to znamená tady, Mach-O univerzální binární 2 architektur. K dispozici jsou 2 možné typy procesorů v systému Mac, a některé programy byly napsány, aby byly schopny provozovat s oběma, a příkazový soubor může určit, že tak to je, co to znamená. Oba tyto soubory byly psány tímto způsobem. Tak vidíme, jak alias funguje, vidíme, jak backquote funguje, vidíme, jak skutečné ls souborů nebo souborů funguje. Toto nemusí fungovat. Zkuste ", kde kde" a "lwh kde". Dobře, pojďme to zkusit. kde kde. kde je shell vestavěný. Nezapomeňte, dříve jsme ukázali, že Bash neměl kam. Pokud zadáte-li v Bash shellu, zobrazí se chybová zpráva. Je to jen část pláště spíše než samostatný příkaz. Co se stane, když jsem typ lwh hledal, kde? Podívejte se, co se děje tam. Ran, kdy, kde, dostal tento výstup, a pak se pokusil spustit ls jako l o tom, kde je shell vestavěný. kde je tam, ale ty ostatní neexistují. Žádný z nich existují, ve skutečnosti. Takže to nemusí vždy fungovat, a to také ukazuje, jak některé věci nedělají přesně to, co byste si mysleli. Pojďme se trochu dále zde. Tohle je Bash. To je také náhrada příkaz jako Backquote. Ale na rozdíl od backquote, používá tuto proměnnou styl. Existuje celá řada výrazů, které začínají znakem dolaru, a když to nejsou proměnné, oni si půjčovali použití znak dolaru uvést výraz nějakého druhu. To může být obklopen závorkách nebo hranatých závorkách nebo dvojitých závorek, , které má jiný účel. Jednotlivé závorky jsou zde substituce příkazu stejně jako jednoduchých zpětných uvozovek. Dvojité závorky je vlastně aritmetické operace. Existují i ​​jiné syntaxe, další operace. Backquote syntaxe je k dispozici v Bash. Nicméně, toto je výhodné. Je to mnohem čitelnější a umožňuje hnízdění. Můžete mít uvnitř $ (command) další příkaz, něco jako - Mám seznam zde. To by fungovat, pokud jsem měl Backquote také. Co když chci udělat něco jako - Ty by se pravděpodobně skutečně používat tento příkaz, ale to vnitřní nahrazení příkaz odráží názvy všech souborů začínajících, pak je to jeden běží ls-l na tyto soubory, a pak je to jedno jen odráží výstup. Asi bys to neudělal, bys prostě echo nebo ls, ale ukazuje, jak vnoření příkazů funguje. Takže jen další funkce zde.  Zmínil jsem to již dříve, že pokud máte kde v C-shellu, Typ práce v Bourne typu mušle pro vyhledání příkazů. Vestavěné příkazy, jen to, co jsem tam ostatní. Příkazy jsou součástí pláště, jako kde. Když shell spustí příkaz jako ls, že najde to přes cestu, najde ho v nějakém adresáři někde, zní, že do paměti, vytvoří nový shell, čte příkaz ls nebo co do shellu kde jsou proměnné prostředí již nachází, a pak je přenáší výkon na to. Vestavěný příkaz, kód tohoto příkazu je uvnitř pláště, takže shell právě začíná spuštěním část svého vlastního kódu. kde je takový příkaz. Je to vlastně dostane rychleji. Nemusí číst něco v paměti, je to už v paměti. Vestavěné příkazy mají vždy přednost před příkazy se stejným názvem. Příkazy, které jsou v adresářích v cestě mohou mít stejný název, Příkazy v různých adresářích, soubory v různých adresářích. Ten, který nastane dříve, v cestě je jednou dostanete. Pokud je vestavěný příkaz, vždy dostanete to. Neexistuje žádný způsob, jak dát nižší prioritu než příkaz v cestě. Chcete-li získat tento příkaz path, můžete zadat úplnou cestu. Pokud by se příkaz, kde v cestě někam, můžete zadat / bin /, kde a vy byste si to. Pokud nechcete zadat celou cestu, můžete definovat alias. Ve skutečnosti, pokud jste dali alias stejný název jako vestavěný příkaz, že to bude fungovat protože definice alias je hodnocena před tím, než shell zjistí, že se jedná o vestavěný příkaz, který by měl být proveden. Tak to je trochu složitější s některými příkazy zde. U některých příkazů jsou ve skutečnosti vestavěné příkazy a v cestě. Jedním z nich je echo, příkaz jsem použít před chvílí v těchto příkladech. Echo je příkaz v cestě, a to v každém shellu. Nemusejí nutně všichni chovat stejným způsobem. To bylo původně příkaz pouze v cestě. Byl postaven v roce lastury později. Vzhledem k tomu, tam jsou možnosti, které jsou závislé na prostředí a možnosti příkazového řádku, vestavěné příkazy byly zapsány do stejné funkce jako příkaz, který byl v cestě, to je nepravděpodobné, že by bylo napsáno, že způsob, jakým v případě, že příkaz nebyl již bylo napsáno na cestu. Tak to má vedlejší účinky. Její historie má účinky zde. Existují možnosti tam. K dispozici je také možnost definovat proměnnou v tcsh názvem echo_style. To je jedna z těchto proměnných, které mohou změnit způsob, jakým ECHO spolupracuje. Existují i ​​další případy, ve kterých můžete přiřadit proměnnou , která mění způsob, jakým operace shell, včetně vestavěného příkazu, funguje. Nebylo by to mít vliv na nic jiného protože ostatní příkazy nemají přístup k proměnným shellu, pouze proměnné prostředí. Ale shell operace může číst proměnné shellu. To nebude fungovat pro csh. To je jen tcsh. To je jedním z dalších rozšíření. Syntaktická analýza má sekvence při hodnocení metaznaků, když se vyhodnocuje proměnné, aliasy, historie odkazy. Tam to zejména sekvence pro tyto věci. Pokud tomu tak je, co v určitém pořadí a dostane se na něco, co je výrazem druhu které již byly hodnoceny, nebude to vyhodnotit znovu. Dostane-li se to, pak to bude jen předávat znaky. Takže pokud vyhodnocení některých výrazů, jako je substituce příkazu pohyblivou nebo co vede k výrazu které byste chtěli být hodnoceny, že bude fungovat pouze v případě, že dojde, že vyhodnocení později v pořadí. Doufám, že jsem je jasné, že. To analýze sekvence, operace v C-shellu, není stejný pro vestavěných příkazů, jak je to pro non-vestavěných příkazů. Nejsem si jistý, o Bash zde. Například, v případě, že proměnná shell produkoval odkaz historie, pravděpodobně by se vrátit do historie. Bylo by jen dostat vykřičník. Ve skutečnosti, můžeme jen zkusit hned teď. sada = a budeme muset dát to tam. Oh, počkej. Promiňte. Udělal jsem to v Bash. Chtěl jsem to udělat zde. Vidíš, tak to nebylo hodnotit tento odkaz historii protože to bylo už za bod vyhodnocení historie výrazů kdy se hodnotí proměnné. Takže to je jeden efekt analýzu. A opět, vestavěné příkazy nejsou provedena stejným způsobem. Dobrá. Pojďme k dalšímu zde. To má být 1 řádek, ale je to usnadňuje čtení. Co to bylo? Možná si vzpomínáte, že můžeme hodnotit hvězdičkami jako zástupné znaky názvu souboru, a tam jsou jiné jméno souboru zástupné znaky, jako je otazník a držáku výrazů. Tento druh hodnocení se nazývá globbing. nastavit noglob na začátku tohoto příkazu říká, nedělejte to. unset noglob říká, že vrátit se na tom, že. Všimněte si, že soubor glob nebude mít tento účinek. V běžném jazyce, nastavte glob nebo unset noglob se zdá být rovnocenné, ale tady to není. Je to unset noglob. Nyní Tset. tset stál terminálu sadu. Je to nepoužívá tak často nyní, ale před okenní systémy byly k dispozici a měl jediný terminál, budete muset určit typ. A pokud něco přijde přes Ethernet nebo ze sítě, budete chtít říct, že je to vt100. VT100 je docela standard v oboru terminálu. Pochází z terminálu prosince. Pokud jste právě dělat dial-up - všimněte si, že? To sahá způsoby, co? Takže pokud bychom prostě Tset sem, jestli jsem to Tset, to resetování můj terminál, ale nic neviděl. To se opravdu nic měnit. -S Dobře. setenv TERM xterm-color. Již víme, že termín byl nastaven tímto způsobem, tak, aby se nezměnil. To je způsob, jakým bychom chtěli udělat. Ale všimněte si, že tento příkaz, tset-s, jen výstupní tyto příkazy. Nebylo spustit. Nebylo spustit tyto příkazy, ale výstup je. Takže toto je určeno k výrobě příkazy, které pak budou spuštěny. Pamatuješ si příkaz v tomto souboru jsem ukázal, že máš Q v něm. Tak pojďme na to. Q potlačuje nějaký výstup, ale to nevadí zde, jak vidíte. Dělám jen, že vám ukázat, že na tom nezáleží. To je v syntaxi backquote. Poznámka Backquote tady, backquote zde. Já vynechání tyto věci zde. Jedná se o případy říkat to, co má dělat v případě jednotlivých typů terminálů - Ethernet, sítě, dial-up, co mají vás. Nezáleží na tom, zde, protože jsme vlastně dělat žádné z těchto věcí. Já jsem jen ilustrující příkaz. Pokud jsem to s Backquote, co budu mít? Také si všimněte, že tady to včetně nastavenou noglob a unset noglob, tak ty se staly nadbytečnými v definici. To není vždy pravda, ale teď jsou zahrnuty v tomto příkazu. Ale pojďme se podívat, co se stane, když to udělám, že a přejděte na začátku řádku s ovládacím A a dělám to. Dobře, sada: Command not found. To je trochu divné, ne? Sada je dobře známý povel. Je to část pláště. sada: Příkaz nebyl nalezen? Proč je to tak? Hmm. Dobře, pojďme si o tom myslíte. Je to běh příkazu substituci backquote, a, který se vyskytuje v určité části sekvence analýzy příkaz. Sada je vestavěný příkaz. Takže v době, kdy to dělá, že příkaz substituce, je to již dostali za bod identifikace vestavěné příkazy. Tak se chová nastavit jako kdyby se jednalo o příkaz v cestě. Netřeba dodávat, že se nenajde ji a dostanete chybu. No. K dispozici je příkladem syntaktické analýzy sekvence. A co budeme dělat, že? Všimněte si tento velmi zajímavý příkaz tady, eval. Zajímalo by mě, co to dělá. Podíváte-li se na manuál - a řekněme to, že ukázat, jak matoucí Tyto příručky jsou - man tcsh, zmatený manuální, hledání věcí tady není snadné ani. Jdeme na to, eval arg, takže můžeme mít jeden nebo více argumentů a tam je seznam věcí, které tam. Zachází s argumenty jako vstupy do shellu a provádí výsledné příkazy v kontextu současného pláště. To se obvykle používá k provádění příkazů generovaných jako výsledek příkazu nebo proměnnou substituce, protože parsování dojde před těchto substitucí. Velmi dobrá. A tady dokonce odkazují na příkaz tNastavte pro použití vzorku jako ten, který jsem právě ukázal vám. Teď mám dostat okno zpět na užitečné místo. Pojďme sem a uvidíme, že eval se používá jen před tím. Takže pojďme se podívat, co se stane, když dáme - jdeme s šipkami v tomto příkazu a řízení na začátku, eval. Dobře, tak to funguje. Pokud tak učiníte eval, to znamená to, co přijde po ní, a je to příkaz. To umožňuje, aby v podstatě analyzovat ji dvakrát. Tento úsek vede tento příkaz uvnitř jednoduchých zpětných uvozovek, dostane výstup. Výstup by měl být spuštěn jako ty příkazy tady jako ty na tenhle a tenhle. Takže tyto příkazy jsou teď tady v tomto pořadí, ale tito jsou vestavěné příkazy, a to nemůže dostat hned. Tak jdeme na eval, eval zvedne, že se začíná celou věc znovu, a to funguje. Příkladem oba backquoting, eval, rozebrat, důsledky rozebrat, a příkaz, který je pravděpodobně velmi malé použití pro vás v dnešní době. Dobře. Dobře, umask. Podívejme se na tento povel tady, umask 022. Zajímalo by mě, co to dělá. Řekněme, napište umask nic po něm. 22. Dobře. 022 a udělat to znovu. Jak jste si mohli myslet, umask bez argumentů vám řekne aktuální masku; umask s argumenty, je to, že, ale to bylo jednou už jsem měl. Co to 022 znamená? Jedná se zde o ochran na soubor. Mají zjistit, kdo je oprávněn číst nebo psát, nebo spustit soubor. Ochrany jsou také nazývány oprávnění. R je zkratka pro čtení, w pro zápis, a x, který není přítomen, znamená vykonat. K dispozici jsou 3 kategorie tam. Poslední 3 prvky jsou v kategorii uživatele. Ti, kteří se vztahují na mne uživatele. Tyto 3 zde platí pro skupiny. Soubor patří do 1. skupiny, může uživatel patřit do několika skupin, ale pokud je uživatel ve skupině, ke které tento soubor patří, pak se tato ochrana se bude vztahovat k němu, pokud to není uživatel. A tohle je každý jiný. Tyto kategorie se vzájemně vylučují. Uživatel ochrany se vztahují k němu, ochran skupiny se vztahují na členy skupiny jiných, než je uživatel, a další ochrana platí pouze pro jiné než pro uživatele a členy skupiny lidí. Pokud existuje r nebo aw nebo x, to znamená, že ochrana je poskytována. Pokud je pomlčka, znamená to, že tomu tak není. Tam vlastně jsou jiné věci, které mohou být zařazeny do zde vedle nich, které jsem se dostat do teď. Umask definuje výchozí nastavení pro soubory, které jste vytvořili. A jako masku, v podstatě říká, že kousky, které nechcete nastavit. Jak se to stane bitů? Pokud si myslíte, že každý z nich jako osmičkové číslo, to je 1s bit, to je 2 s, to je 4S. Takže 0 až 7 popíše, jaká kombinace r je, w je, a x je máte pro tyto tři a podobný počet pro tyto a pak se pro tyto případy. Takže 022 znamená 0 ​​pro ostatní, 2 pro skupinu, 2 pro uživatele. Ale to je maska. Maska je to, co nemáte. Je mi to líto. Jen jsem ti dal věci ve špatném pořadí. Je to první 3. Tyto 3 jsou uživatel, tyto 3 jsou skupina, tyto 3 jsou ostatní. Promiň, že jsem ti to dal v nesprávném pořadí. 0, což je první z těch, nezobrazuje hodnotu, ale pokud číslo není, to je 0. To znamená, že všechny 3 z nich by bylo povoleno. Všimněte si, že v tomto konkrétním jednom x není povoleno. Důvodem je to, že plášť je schopen určit zda soubor by měl být spuštěn, nebo ne. Vzhledem k tomu, že to není spustitelný soubor, to nenastavil x. Na 2 znamená, že oprávnění k zápisu, na druhou kategorii tady, jeden ve středu, se zamítá. Takže znovu, to jsou věci, které to popíral. No, x je povolen, ale není to tady, protože to není spustitelný a podobně pro ostatní. Tak to je společná umask. Dalším společným jeden je 700 - dát si všechno a nikdo jiný nic. A existují i ​​jiné možnosti. Vrátím se k tomu. Použití historie mohu hledat zpět, že lwh tam. Dobře. Tak tady, to jsou skořápky. Bash, majitel, který je systémový účet, můžete dělat všechno. Group a všichni ostatní mohou udělat, číst nebo spouštět, ale ne psát. Tento člověk nedovolí ani majitel zapisovat do něj. Pokud majitel chtěl napsat to, systémový účet, by musel nejprve změnit ochranu. Ale opět, umask nastaví výchozí zakrývat to, uvedením bity, které nebudou nastaveny. To je obvykle v jednom ze svých konfiguračních souborů, což je. Cshrc pro C-shell nebo. profilu pro Bourne-typu mušlí. To může být na jiném místě i v případě, že jsou i jiné inicializační soubory v systému. Mimochodem, to je umask. Je tu něco, co trochu divný tady, a to je, proč je tam jeden příkaz na to? Kdybych psal to bych aby to proměnná, umask = nějaká hodnota. Proč je tam celý příkaz jen pro tento účel? Důvodem je to jen jde zpátky ke kořenům Unix. Unix byl jen nějaký programovací projekt v Bellových laboratořích v roce 1970. Lidé prostě dali dohromady, aby program. Oni nikdy neměl v úmyslu, aby se stala po celém světě operačního systému. Různí lidé psali různé části bez přemýšlení moc o tom, jak se chystají využít - spíše útržkovité. A to sešlo takhle, a je to pořád jako, že v některých ohledech. Tak, že odráží historii, a tam jsou ještě tyto nesrovnalosti a liché prvky něj. Dobře. Další, kdo zde. Jak jsem psal dříve, C-shell není opravdu používá moc pro programování, i když to může být. To provádí pomaleji, znovu trade-off mezi interaktivním použití, která má více zapojit, než rychlost zpracování, které můžete udělat bez zpracování. Mezi další funkce přidané do Bourne shellu od Korn a Bourne-znovu mušlí Nezdá se zpomalit, a já nevím, proč tomu tak je. Mohlo by to být jen lepší programování, ale já nejsem v pozici, vědět. Rychlost zde ve skutečnosti není tak velký problém, i když je uvedeno. Důvodem je, že skripty skutečně získat poměrně rychle. Pokud tam je spousta příkazů jako v calculational programu, pravděpodobně by se to udělat v shell skript. Operace je poměrně jednoduché a přímočaré. Ty, které jsem zažil, že jsou příliš pomalé zahrnovat opakované aplikace pomalých příkazů. Dříve jsem se zmínil o proudový editor sed. Tento příkaz je pomalý. Pokud provedete sed mnohokrát, budete mít pomalý scénář, ale není to shell, který je pomalý. Běh je v Bourne shellu nebude mnohem rychleji, než běží to v C-shellu, i když to možná některé výhody tam. Mezi další programovací funkce, na druhé straně, jsou významné důvody, proč byste používají Bourne typu skořápky. C-shell má liché funkce na to - Skutečnost, že nevím, jestli je proměnná shellu proměnnou nebo proměnnou prostředí. To může být velmi matoucí. Není to tak snadné psát jen na základě svých zkušeností z programování v jiných jazycích. Myslím, že můžete najít Bourne typu skořápky více v souladu s vaší zkušeností. Některé skripty, i když mohou být tisíce linek v délce. Ty, které jsem viděl se používají pro záplatování operačních systémů. Ti mohou provádět velmi pomalu, ale nechcete spustit ty velmi často. Je to pouze tehdy, když děláte záplatování, a je to jen systém manažer, který dělá tyhle věci, takže to opravdu není moc problém. Ti, kteří jsou stovky řádků dlouho vlastně provést poměrně rychle. , Kde je tento zde, jaké jsou ty vylepšení? Už jsem se zmínil některé z nich - pole, výpočty, na $ () výraz pro výpočty v Bash shellu, jiný druh substituce příkazu. Existují různé druhy příkazů testování kterou můžete udělat, podmíněné testy na existenci souboru nebo jiné věci. Naposledy zde, tento příkaz zde. Co to udělat, a proč by jej použít někdo? printenv VariableName. Víme, co printenv dělá. To nám říká, že hodnotu proměnné. A printenv VariableName se nám to říct moc, protože tam žádná taková proměnná. Blank. Ale dejme tomu něco smysluplného. To není ani tam. Dobře. Myslím, že jsem nikdy definována tak, že. Řekněme, podívej se na můj prostředí. To je další příkaz, kterou si můžete prohlédnout své prostředí. Tam je starý dobrý EDITOR, který jsme viděli předtím. Co to bylo? Zde máme backquote výraz. Nezapomeňte, je to C-shell. Takže printenv EDITOR nám dá hodnotu editoru. Je to vi. A pak se nastaví tuto hodnotu do proměnné a, příkazem set. Takže teď, když to udělám echo $ a, mám vi. To se nezdá být strašně užitečné. Nicméně, to vlastně dělá má smysl. Vzhledem k tomu, že nevíme, zda proměnná je proměnná shellu nebo proměnnou prostředí pomocí syntaxe zkušební znak dolaru, můžeme použít printenv aby se ujistil, že je to proměnná prostředí. Takže pokud tam bylo shell variabilní editor, to by se nedostal ji. To pracuje pouze s proměnnou prostředí. Pokud by se proměnná shellu a chtěl jsem jeho hodnotu, Budu muset najít nějaký jiný způsob, jak to udělat. Jeden způsob, jak to udělat, by bylo tím, že dělá sadu a potrubí. To je jeden z metaznaků, speciální znaky. To odešle výstup souboru na něco jiného. Pojďme se podívat, co jsme tam mohli najít. Nic. Dobře. Pojďme se jen podívat, co je tam všechno dohromady. Bylo echo_style, kterou jsem již zmínil. Dobře, pojďme to udělat. Vzpomínám si, jak již bylo zmíněno dříve, echo_style určuje způsob echo příkaz spustit. bsd je zkratka pro Berkeley standardní distribuce. To je Berkeley Unix z roku 1970. To je jeden ze způsobů, které odrážejí může běžet. Nastavení echo_style na tuto hodnotu v TC-shell způsobí, že echo chovat tímto způsobem. Takže nastavit dělá, ale nastavte dostane pouze proměnné shellu. To by se nenašel Editor, který není proměnná shellu. Nic. Takže to je jeden způsob, jak je rozlišit. Ale skutečnost, že budete muset jít přes nějakého podivného příkazem, že rozlišovat mezi proměnných shellu a proměnné prostředí ukazuje druh nepraktické povaze C-shell pro některé účely. A teď, poslední a možná nejméně, to je manuálové stránky. Ti, kdo možná víte, člověk je příkaz zkratka pro návodu. Manuálové stránky pro skořápky jsou těžko čitelné. Jsou velmi dlouho. Jsou organizována způsobem, který může dělat to těžké najít, co hledáte. Takže pokud hledáte něco s účelem, nemusí vědět, jestli tento účel je proměnná shellu nebo něco jiného, takže nemusí vědět, kde ji hledat. Můžete se podívat na různé řetězce, ale řetězce se často opakují. Takže je to většinou špatně čitelný. Právě jsme se podíval na manuálové stránce TC-shell trochu před nalézt příkaz eval. Některé věci jdou rychleji. Jedním ze způsobů je hledat řetězec. Můžete použít pager. Pager má lomítko se podívat na příkazu nebo řetězce uvnitř provoz pageru. Muž ve výchozím nastavení bude používat pagery, ať už více či méně. Já nevím, jestli jste obeznámeni s těmi, ale ti může ukázat soubory kousek po kousku. Byl jsem pomocí LESS zobrazení těchto jednotlivých souborů jsme se sem dostali. Můžete hledat tam uvnitř. Vyzkoušejte stránkování pomocí různých vyhledávacích řetězců. Také manuálové stránky v různých operačních systémech nemusí být stejné. Mohou být samostatné stránky pro csh a tcsh. Jsou to nejsou na Mac, ale mohou být, jsou-li samostatné příkazy. Pokud sh není opravdu volat Bash, tam asi bude samostatný muž stránku. Některé systémy mají oddělené manuálové stránky pouze pro C-shell vestavěných příkazů. Někdy, pokud si chcete přečíst popis vestavěným příkazem to je také v cestě, jako ozvěna, musíte si přečíst manuálovou stránku na tento příkaz na echo zjistit, jak to bude fungovat jako vestavěný příkaz i když nejste volání vestavěný příkaz. To je nevýhoda operačního systému obecně, nejen pro skořápky, i když pro skořápek zejména manuálové stránky jsou poměrně dlouhé, částečně proto, že jsem přidal užitečných funkcí k nim, což může být pozitivní. Dobře. Jsou nějaké dotazy? Všechny témata, které chcete vychovat? Něco tady relevantní? No, bylo to velmi příjemné mluvit s vámi se všemi. Doufám, že se vám něco z tohoto semináře které budou užitečné pro vás ve vaší další činnosti. [CS50.TV]