1 00:00:00,000 --> 00:00:02,320 >> [Seminar - Unix Schelpen, Environments] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [Dit is CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Vandaag onderwerp is de Unix shell. 5 00:00:12,770 --> 00:00:20,600 Ik ben Douglas Kline, deskundige, of op zijn minst redelijk bekwaam gebruiker, van de schelp. 6 00:00:20,600 --> 00:00:25,280 Een shell is de interface voor de gebruiker om het besturingssysteem van de computer. 7 00:00:25,280 --> 00:00:29,580 De naam is misleidend, omdat, in tegenstelling tot de schelp van een dier, 8 00:00:29,580 --> 00:00:34,890 die is hard en beschermend, de computer shell zorgt voor de communicatie. 9 00:00:34,890 --> 00:00:39,120 Dus poreus membraan zou waarschijnlijk een betere metafoor. 10 00:00:39,120 --> 00:00:44,500 >> De originele shell voor Unix is ​​de Bourne shell. 11 00:00:44,500 --> 00:00:46,450 Bourne is gespeld B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne was een van de oorspronkelijke auteurs van Unix, 13 00:00:49,770 --> 00:00:51,700 en dus de schaal is naar hem vernoemd. 14 00:00:51,700 --> 00:00:54,850 De naam van die shell als een commando is gewoon sh. 15 00:00:54,850 --> 00:00:57,400 Dat is de opdracht die u kunt uitvoeren. 16 00:00:57,400 --> 00:01:00,810 De schaal begint bij het inloggen. 17 00:01:00,810 --> 00:01:04,459 Wanneer u zich aanmeldt bij de computer, de shell begint net lopen voor jou, 18 00:01:04,459 --> 00:01:06,820 en dat is wat neemt uw commando's. 19 00:01:06,820 --> 00:01:09,790 Het kan beginnen op andere momenten ook. 20 00:01:09,790 --> 00:01:16,780 Als je verschijnt een venster met geen andere indicatie, zal het een shell voor je begint. 21 00:01:16,780 --> 00:01:20,450 Dat is hoe het is dat je kunt naar een raam en begint te typen commando's 22 00:01:20,450 --> 00:01:23,960 enzovoort daar ook al heb je niet inloggen op dat venster. 23 00:01:23,960 --> 00:01:26,670 Bovendien, als je een remote login doen, 24 00:01:26,670 --> 00:01:30,250 dan zal het een shell te starten op de externe computer. 25 00:01:30,250 --> 00:01:44,310 En is het mogelijk om opdrachten uit te voeren zonder een interactieve shell. 26 00:01:44,310 --> 00:01:48,990 Dat kan betekenen binnen uw huidige operatie, 27 00:01:48,990 --> 00:01:50,700 en het kan ook betekenen dat een op afstand te bedienen. 28 00:01:50,700 --> 00:01:52,900 Je zou een commando te sturen naar een andere computer, 29 00:01:52,900 --> 00:01:55,460 waaronder het opstarten van een shell daar. 30 00:01:55,460 --> 00:01:57,760 In feite is het opstarten van een shell er zijn 31 00:01:57,760 --> 00:02:01,740 zelfs als dat niet je uiteindelijke doel. 32 00:02:05,310 --> 00:02:12,350 Wanneer iets wordt opgestart als dit, is het niet per se start een nieuwe shell. 33 00:02:12,350 --> 00:02:17,430 Als je verschijnt een nieuw venster, is het mogelijk om het te vertellen om een ​​editor te brengen 34 00:02:17,430 --> 00:02:18,940 of een ander commando. 35 00:02:18,940 --> 00:02:20,560 In dat geval zal de uitgever beginnen vanaf nul. 36 00:02:20,560 --> 00:02:22,930 Wanneer de editor eindigt, het raam eindigt. 37 00:02:22,930 --> 00:02:24,620 Dit is een beetje ongewoon, maar het kan worden gedaan. 38 00:02:24,620 --> 00:02:27,140 In die gevallen zal het niet een schelp. 39 00:02:27,140 --> 00:02:31,890 Dus het is niet noodzakelijk zo dat een raam of een dergelijke toepassing zal een schelp. 40 00:02:31,890 --> 00:02:34,030 >> Shell ontleedt opdrachten. 41 00:02:34,030 --> 00:02:40,900 Parsing betekent het identificeren van de verschillende elementen en hun kwalificatie. 42 00:02:40,900 --> 00:02:43,470 Binnen een opdracht, de complete string die u typt, 43 00:02:43,470 --> 00:02:47,310 zullen er 1 of meer enkele te voeren opdrachten. 44 00:02:47,310 --> 00:02:50,050 Andere elementen kunnen argumenten. 45 00:02:50,050 --> 00:02:55,020 Er kunnen ook speciale tekens die de uitvoering van een opdracht beïnvloeden. 46 00:02:55,020 --> 00:02:59,710 Ze kunnen de uitgang ergens anders dan het scherm te sturen 47 00:02:59,710 --> 00:03:01,750 indien de opdracht normaal zou sturen naar het scherm. 48 00:03:01,750 --> 00:03:04,390 Het kan invoeren redirect, het kan andere dingen ook doen. 49 00:03:04,390 --> 00:03:08,120 Er zijn verschillende andere symbolen, karakters, enzovoort. 50 00:03:08,120 --> 00:03:13,600 Parsing gaat opsporen en interpreteren van die dingen. 51 00:03:13,600 --> 00:03:19,560 >> Nu als er geen vragen meer, dat is nogal onwaarschijnlijk omdat er geen meer mensen, 52 00:03:19,560 --> 00:03:24,620 we zullen hier naar mijn volgende pagina. 53 00:03:24,620 --> 00:03:29,170 >> Ik zei eerder dat de Bourne shell is de eerste shell. 54 00:03:29,170 --> 00:03:31,550 Er zijn anderen. 55 00:03:31,550 --> 00:03:34,520 Een daarvan is de C-shell. Het commando is csh. 56 00:03:34,520 --> 00:03:36,830 De naam C-shell is gewoon een woordspeling. 57 00:03:36,830 --> 00:03:41,260 Deze schaal werd geïntroduceerd met Berkeley Unix in het midden van de jaren 1970. 58 00:03:41,260 --> 00:03:44,830 Berkeley Unix was een baanbrekende gebeurtenis in de ontwikkeling van Unix. 59 00:03:44,830 --> 00:03:48,770 Het was een enorme revolutie en onder meer de introductie van deze schelp. 60 00:03:48,770 --> 00:03:50,790 De reden voor die woordspeling, C-shell, 61 00:03:50,790 --> 00:03:56,490 is dat de C-shell heeft een aantal kenmerken in, die de taal C lijken, 62 00:03:56,490 --> 00:03:59,740 die de Bourne shell niet over - 63 00:03:59,740 --> 00:04:02,140 of zij niet over op dat moment. 64 00:04:02,140 --> 00:04:05,190 Er is ook de TC-shell. 65 00:04:05,190 --> 00:04:07,360 Dit is een superset van de C-schaal. 66 00:04:07,360 --> 00:04:11,470 Het heeft extra functies, waarvan vele zijn nuttig voor interactief gebruik, 67 00:04:11,470 --> 00:04:16,050 zoals herinnerend opdrachten in de geschiedenismechanisme, 68 00:04:16,050 --> 00:04:18,459 die ik iets later zal beschrijven - 69 00:04:18,459 --> 00:04:23,120 op eenvoudige wijze gemodelleerd naar een editor. 70 00:04:23,120 --> 00:04:29,170 Het heeft ook bindingen die u toelaten om een ​​korte sleutel touwtje binden aan een langere opdracht. 71 00:04:29,170 --> 00:04:31,440 We gaan niet te krijgen in dat vandaag. 72 00:04:31,440 --> 00:04:33,650 Het heeft een aantal functies die handig zijn voor het programmeren zijn. 73 00:04:33,650 --> 00:04:37,020 Echter, de C-shell niet vaak gebruikt voor shell programmeren. 74 00:04:37,020 --> 00:04:39,080 Shell-programma's, als je niet al weet, 75 00:04:39,080 --> 00:04:41,690 zijn programma's die bestaan ​​uit shell kenmerken. 76 00:04:41,690 --> 00:04:43,220 Je kan deze draaien als programma's. 77 00:04:43,220 --> 00:04:46,760 Je schrijft een bos van shell commando's in een bestand en het bestand uit te voeren. 78 00:04:46,760 --> 00:04:49,760 U hoeft niet om het te compileren. Dit is een interpretatieve taal. 79 00:04:49,760 --> 00:04:57,320 De zinsnede C-shell is nu dubbelzinnig omdat het alleen kan verwijzen naar de oorspronkelijke C-shell, csh, 80 00:04:57,320 --> 00:05:01,200 of om alle C-schelpen, waaronder tcsh. Het is een beetje dubbelzinnig. 81 00:05:01,200 --> 00:05:08,250 >> Een later shell is de Korn shell, ksh, vernoemd naar de programmeur, Korn. 82 00:05:08,250 --> 00:05:14,160 Deze shell geprobeerd op te nemen in 1 shell 83 00:05:14,160 --> 00:05:16,960 de voordelen van de C-shell voor interactief gebruik 84 00:05:16,960 --> 00:05:19,230 en de Bourne shell voor de programmering. 85 00:05:19,230 --> 00:05:25,440 Het is gebruikt als een interactieve shell door sommige mensen - een minderheid. 86 00:05:25,440 --> 00:05:32,050 Later echter, was er nog een introductie, de Bash shell, BASH, 87 00:05:32,050 --> 00:05:35,290 weer een woordspeling, Bourne-Again Shell. 88 00:05:35,290 --> 00:05:43,830 Het is een uitbreiding van de Bourne shell. Korn shell is ook. Beiden zijn. 89 00:05:43,830 --> 00:05:48,100 Het heeft dezelfde doelstellingen van de Korn-shell van de samenvoeging van de C-shell 90 00:05:48,100 --> 00:05:50,980 en voordelen Bourne shell in 1 schelp. 91 00:05:50,980 --> 00:05:56,810 Veel van de verbeteringen van de Korn shell zijn ook opgenomen in Bash. 92 00:05:56,810 --> 00:06:00,710 Bash heeft echter meer en verdient derhalve de voorkeur. 93 00:06:00,710 --> 00:06:05,180 De Bourne-Again Shell en de Korn shell zijn Bourne-achtige shells genoemd 94 00:06:05,180 --> 00:06:07,730 omdat ze onder de kenmerken van de Bourne shell, 95 00:06:07,730 --> 00:06:11,180 die onverenigbaar zijn in sommige opzichten met C-schelpen. 96 00:06:11,180 --> 00:06:15,520 Er zijn andere schelpen naast die, wat bedoeld voor beperkt gebruik, 97 00:06:15,520 --> 00:06:20,670 misschien beperkt tot een aantal opdrachten, misschien gespecialiseerde doeleinden, niet vaak gebruikt. 98 00:06:20,670 --> 00:06:24,240 >> Oke. Volgend item hier. 99 00:06:31,300 --> 00:06:38,970 De Bash shell is geworden in verband met verscheidene vormen van Linux. 100 00:06:38,970 --> 00:06:41,550 Ik weet niet zeker of dat waar is van iedere vorm. 101 00:06:41,550 --> 00:06:43,280 Er zijn vele vormen die er zijn en ik heb ze niet allemaal gebruikt, 102 00:06:43,280 --> 00:06:46,870 maar in die die ik heb gebruikt het is verbonden met het uitgegroeid. 103 00:06:46,870 --> 00:06:49,670 Voor zover ik weet, is er niets over Bash 104 00:06:49,670 --> 00:06:52,210 die het niet meer compatibel met Linux maakt 105 00:06:52,210 --> 00:06:55,020 dan elke andere combinatie van Shell en het besturingssysteem. 106 00:06:55,020 --> 00:06:59,690 Ik denk dat dit waarschijnlijk gewoon weerspiegelt de neigingen van de programmeurs. 107 00:06:59,690 --> 00:07:07,500 Dat het is uitgegroeid geassocieerd met Linux is een andere reden om Bash liever ksh 108 00:07:07,500 --> 00:07:11,820 omdat dingen zijn waarschijnlijk in te kunnen worden geschreven en het is waarschijnlijk te verspreiden. 109 00:07:11,820 --> 00:07:15,410 Ik zal je andere redenen om die later op te geven. 110 00:07:15,410 --> 00:07:21,330 Bourne shell scripts moeten worden uitgevoerd onder de Korn shell of Bash. 111 00:07:21,330 --> 00:07:22,650 Als je iets voor de Bourne shell schrijven, 112 00:07:22,650 --> 00:07:26,180 kunt u waarschijnlijk voer het onder ksh of bash. 113 00:07:26,180 --> 00:07:30,610 Korn shell scripts zullen waarschijnlijk draaien onder Bash, maar ik kan niet garanderen dat. 114 00:07:30,610 --> 00:07:36,040 Later hier, moet C-shell scripts worden uitgevoerd onder de TC-shell. 115 00:07:38,850 --> 00:07:41,690 De C-shell is eigenlijk nooit veel gebruikt voor scripting 116 00:07:41,690 --> 00:07:48,110 sinds de Bourne shell en later de Bourne-soort schelpen waren de voorkeur voor dat doel. 117 00:07:48,110 --> 00:07:50,620 Dus dat is echt niet zo belangrijk. 118 00:07:50,620 --> 00:07:53,480 Er zijn heel veel van Bourne shell scripts die werden lang geleden geschreven, 119 00:07:53,480 --> 00:07:56,860 voordat de Korn shell of de Bourne-shell opnieuw werden ingevoerd. 120 00:07:56,860 --> 00:07:59,300 Die zijn nog steeds in gebruik, een deel van de besturingssystemen, 121 00:07:59,300 --> 00:08:01,590 en zo zal je ze vinden als je kijkt in het besturingssysteem 122 00:08:01,590 --> 00:08:03,760 of een oude programmering pakketten. 123 00:08:03,760 --> 00:08:12,840 >> Bash is tot op zekere hoogte worden een soort lingua franca voor besturingssystemen. 124 00:08:12,840 --> 00:08:17,580 Het is al uitgebreid naar Windows en VMS. 125 00:08:17,580 --> 00:08:20,440 VMS, voor het geval je niet weet, is een eigen besturingssysteem 126 00:08:20,440 --> 00:08:25,480 van Digital Equipment Corporation, die nog steeds in gebruik, grotendeels achter de schermen. 127 00:08:25,480 --> 00:08:29,250 En als het gaat om te draaien op verschillende besturingssystemen, 128 00:08:29,250 --> 00:08:31,110 waarschijnlijk de mensen de neiging om te verschuiven voor. 129 00:08:31,110 --> 00:08:33,840 Maar deze ontwikkeling is relatief recent. 130 00:08:33,840 --> 00:08:39,490 Het is nog maar net begonnen, dus ik kan niet voorspellen of dit zal blijken te zijn echt dat soort lingua franca zijn. 131 00:08:39,490 --> 00:08:43,539 Ook, omdat bestandspadnamen en bibliotheken verschillen 132 00:08:43,539 --> 00:08:46,210 tussen deze verschillende besturingssystemen, 133 00:08:46,210 --> 00:08:50,250 je zou niet in staat zijn om een ​​Bash-script te schrijven over een besturingssysteem 134 00:08:50,250 --> 00:08:51,840 en voer het vervolgens op een ander. 135 00:08:51,840 --> 00:08:54,440 Je moet in staat zijn om het te verplaatsen tussen verschillende Unix, Linux 136 00:08:54,440 --> 00:08:59,020 Mac OS besturingssystemen, maar niet per se naar Windows of VMS. 137 00:08:59,020 --> 00:09:01,390 Je zou kunnen hebben om een ​​bestand padnaam beschrijvingen te veranderen, 138 00:09:01,390 --> 00:09:03,180 en sommige bibliotheken kan anders zijn, 139 00:09:03,180 --> 00:09:05,230 die de weg dat sommige commando's werken kunnen beïnvloeden 140 00:09:05,230 --> 00:09:09,730 of hoe zij verwerken argumenten en dergelijke. 141 00:09:09,730 --> 00:09:19,230 Trouwens, een waarschuwing is dat er geen garantie 142 00:09:19,230 --> 00:09:23,570 dat alle verschillende schelpen die ik heb genoemd - Bourne shell, C-shell, 143 00:09:23,570 --> 00:09:29,880 TC-shell, Korn shell, Bourne-Again Shell - zal beschikbaar zijn onder een Unix 144 00:09:29,880 --> 00:09:33,750 of Linux of Mac OS-computer. 145 00:09:33,750 --> 00:09:35,620 Ze kunnen er gewoon niet zijn. 146 00:09:35,620 --> 00:09:38,300 Dat is een van de waarschuwingen hier. 147 00:09:38,300 --> 00:09:41,490 Het is een ongelukkige beperking hier omdat je wilt dingen om overal te werken, 148 00:09:41,490 --> 00:09:44,380 maar helaas kun je niet op vertrouwen. 149 00:09:44,380 --> 00:09:47,230 >> Oke. Volgende hier. 150 00:09:50,280 --> 00:09:54,370 Laten we zeggen dat je wilt een shell script te schrijven, 151 00:09:54,370 --> 00:09:57,170 een programma dat bestaat uit shell commando's. 152 00:09:57,170 --> 00:10:01,200 Je schrijft je commando's, zet ze in een bestand, en het bestand uit te voeren. 153 00:10:01,200 --> 00:10:04,230 Wat als je wilt argumenten bevatten? 154 00:10:04,230 --> 00:10:09,650 In het geval van shell operaties, zijn argumenten parameters of positionele parameters, ook wel 155 00:10:09,650 --> 00:10:15,940 en ze zullen worden opgeroepen door een dollarteken en cijfer, $ 1, $ 2. 156 00:10:15,940 --> 00:10:27,000 Dus als het script heeft deze naam, zou mijn eerste argument argument 1 zijn 157 00:10:27,000 --> 00:10:30,540 en mijn tweede misschien argument 2 zijn, 158 00:10:30,540 --> 00:10:34,110 en in mijn script als ik wil verwijzen naar deze dingen - 159 00:10:34,110 --> 00:10:36,810 laten we dit wist want ik ben niet echt van plan om het uit te voeren - 160 00:10:36,810 --> 00:10:42,160 in mijn script dat ik zou $ 1 te verwijzen naar arg1, 161 00:10:42,160 --> 00:10:45,890 $ 2, die uit zal komen op die manier, arg2. 162 00:10:45,890 --> 00:10:50,080 Dus deze symbolen zijn beschikbaar om te verwijzen naar argumenten, 163 00:10:50,080 --> 00:10:52,390 en die gelden voor alle schalen. 164 00:10:52,390 --> 00:10:56,520 Daarnaast zijn er andere karakters. 165 00:10:56,520 --> 00:11:01,700 $ * Verwijst naar de volledige lijst met argumenten, allemaal. 166 00:11:01,700 --> 00:11:05,390 $ # Verwijst naar het aantal argumenten. 167 00:11:05,390 --> 00:11:07,910 Nogmaals, dit geldt voor alle schalen. 168 00:11:07,910 --> 00:11:15,540 Deze symbolen * en # kunnen worden gebruikt met de betekenissen in andere plaatsen ook. 169 00:11:15,540 --> 00:11:17,940 We zullen niet krijgen in dat. 170 00:11:17,940 --> 00:11:20,460 >> Shell specificeerder lijn. Waar is dat voor? 171 00:11:20,460 --> 00:11:27,760 Laten we zeggen dat je hebt geschreven een script en het is voor een bepaalde shell en je wilt het uit te voeren. 172 00:11:27,760 --> 00:11:33,500 Hoe weet je wat shell uw besturingssysteem zal gebruiken om uw script uit te voeren? 173 00:11:33,500 --> 00:11:37,230 Op een gegeven moment kon je ervan uitgaan dat het zou draaien in de Bourne shell 174 00:11:37,230 --> 00:11:39,440 als je niet anders heb gezegd, 175 00:11:39,440 --> 00:11:41,730 maar mensen zijn niet het schrijven van scripts in de Bourne shell die veel meer 176 00:11:41,730 --> 00:11:43,750 en je kan niet eens rekenen op dat niet meer. 177 00:11:43,750 --> 00:11:48,740 Dus hier hebben we een shell specifier lijn hier. 178 00:11:48,740 --> 00:11:52,450 Die aangeeft Bash. 179 00:11:52,450 --> 00:11:56,750 Merk op dat het specificeert het in de padnaam, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Als een computer de Bash-shell, maar niet in de map bin, / bin, dit zal niet werken. 181 00:12:02,870 --> 00:12:06,870 Dat is een andere qualifier, nog voorzichtigheid hier. 182 00:12:06,870 --> 00:12:09,500 Het hekje is het commentaar teken. 183 00:12:09,500 --> 00:12:12,300 Dat geldt voor alle schelpen. 184 00:12:12,300 --> 00:12:18,610 Het specifieke geval hier, #! aan het begin van een script, een speciaal geval. 185 00:12:18,610 --> 00:12:23,410 Dat bepaalt de schaal waarin het script uit te voeren. 186 00:12:23,410 --> 00:12:30,230 Zoals ik al zei, is het misschien niet op dezelfde plaats / bin zijn. 187 00:12:30,230 --> 00:12:34,880 Daarnaast is er nog een ding hier. 188 00:12:34,880 --> 00:12:41,250 Als u gewoon gebruik maken van het hekje zonder uitroepteken en padnaam, 189 00:12:41,250 --> 00:12:44,640 dat zou een C-shell te geven. 190 00:12:44,640 --> 00:12:48,300 Toch denk ik niet aanraden dat te doen, want ik ben niet in staat om te garanderen 191 00:12:48,300 --> 00:12:49,750 dat deze altijd werkt. 192 00:12:49,750 --> 00:12:52,220 Als je een C-shell, zou het beter zijn om dat te zeggen. 193 00:12:52,220 --> 00:12:58,450 Dan is er nog iets wat nogal verwarrend hier. 194 00:12:58,450 --> 00:13:03,940 Als je een shell specifier lijn gebruiken, zoals / bin / bash 195 00:13:03,940 --> 00:13:07,070 en dat shell is er niet beschikbaar is, 196 00:13:07,070 --> 00:13:10,680 er is niet zoiets als / bin / bash op die specifieke computer, 197 00:13:10,680 --> 00:13:14,330 hetzij omdat het niet Bash hebben of omdat het in een andere locatie, 198 00:13:14,330 --> 00:13:17,450 zult u een foutmelding gekregen dat de script je liep bestaat niet krijgen. 199 00:13:17,450 --> 00:13:21,510 En natuurlijk je script bestaat, zodat foutmelding is verwarrend. 200 00:13:21,510 --> 00:13:24,810 De reden dat het besturingssysteem geeft je die fout 201 00:13:24,810 --> 00:13:28,370 of, beter gezegd, dat je interactieve shell waarin u werkt dit geeft die fout, 202 00:13:28,370 --> 00:13:33,510 is dat het verslag van de opdracht die u gebruikt, dat is de naam van het script. 203 00:13:33,510 --> 00:13:36,920 Dat commando effectief wel de shell door de naam van het script. 204 00:13:36,920 --> 00:13:39,330 Dat is waar je die verwarrende foutmelding. 205 00:13:39,330 --> 00:13:42,980 Een andere manier om shell script te bellen 206 00:13:42,980 --> 00:13:45,910 is door het specificeren van de shell op de opdrachtregel, zoals hier. 207 00:13:45,910 --> 00:13:52,510 Dit is een opdracht. Dit zegt run Bash en voer mijn script in Bash. 208 00:13:52,510 --> 00:13:55,680 Dat zal voorrang hebben op een specifier lijn, 209 00:13:55,680 --> 00:14:02,090 en dit heeft de functie van het toestaan ​​van u om te voorzien in uiteenlopende padnamen. 210 00:14:02,090 --> 00:14:04,840 Als je alleen maar een commando, zal het besturingssysteem op zoek naar die opdracht 211 00:14:04,840 --> 00:14:06,410 op verschillende plaatsen. 212 00:14:06,410 --> 00:14:08,820 Als het beschikbaar is, moet het te vinden. 213 00:14:08,820 --> 00:14:12,290 De computer zal Bash vinden waar het ligt en voer het uit, 214 00:14:12,290 --> 00:14:15,470 zodat u niet nodig hebt dan te maken over wanneer zij constateert het zijn. 215 00:14:15,470 --> 00:14:17,360 Er zijn mogelijk andere problemen hier, 216 00:14:17,360 --> 00:14:20,830 alsof er meer dan 1 versie van Bash, dat is mogelijk, maar onwaarschijnlijk. 217 00:14:20,830 --> 00:14:23,540 Dus dat is een andere manier om te gaan met deze dingen. 218 00:14:23,540 --> 00:14:30,480 Specifier lijnen kan elk shell bellen. 219 00:14:30,480 --> 00:14:34,480 Ze kunnen ook andere dan de schelpen dingen noemen. 220 00:14:34,480 --> 00:14:37,940 Voorbeelden die ik hier heb zijn sed, dat is de stroom editor; 221 00:14:37,940 --> 00:14:39,900 awk, dat is een patroon verwerking taal; 222 00:14:39,900 --> 00:14:43,680 en perl, een zeer hoog ontwikkelde scripttaal. 223 00:14:43,680 --> 00:14:47,570 Als je een specifier lijn die een van deze programma's in het begin, 224 00:14:47,570 --> 00:14:51,270 zal het direct in dat programma in plaats van het starten van een schelp. 225 00:14:51,270 --> 00:14:54,030 Die programma's hebben grenzen aan hun capaciteiten. 226 00:14:54,030 --> 00:14:58,790 Perl is zeer capabel. Sed is een editor. Het kan dingen doen dan alleen te bewerken. 227 00:14:58,790 --> 00:15:03,300 Maar het kan moeilijk te programmeren dat. 228 00:15:03,300 --> 00:15:09,670 Daarnaast passeren argumenten en spullen om script onmogelijk of verwarrend. 229 00:15:09,670 --> 00:15:15,030 Dus in die gevallen met awk of sed, het is, althans in mijn ervaring, 230 00:15:15,030 --> 00:15:18,910 beter om een ​​shell script en oproep awk schrijven of sed uit de shell script 231 00:15:18,910 --> 00:15:24,660 in plaats van te bellen awk of sed als het script specificeerder lijn. 232 00:15:24,660 --> 00:15:26,980 Perl is een zeer divers taal, zoals ik al zei. 233 00:15:26,980 --> 00:15:30,050 Je kunt geen interactieve opdrachten uitvoeren in perl, 234 00:15:30,050 --> 00:15:32,660 wat betekent dat u geen delen van scripts die je aan het ontwikkelen bent kunt testen 235 00:15:32,660 --> 00:15:33,970 door ze interactief. 236 00:15:33,970 --> 00:15:36,160 Echter, het is een zeer capabele taal 237 00:15:36,160 --> 00:15:40,960 en heeft zich ontwikkeld tot een zeer veel gebruikte tool. 238 00:15:40,960 --> 00:15:45,720 Dat is gewoon een beetje een terloopse opmerking over de ontwerper lijnen. 239 00:15:45,720 --> 00:15:50,610 >> In alle of de meeste vormen van Linux - nogmaals, ik kan er niet zeker van dat is alles - 240 00:15:50,610 --> 00:15:57,900 en in Mac OS, als je csh typt krijg je tcsh, 241 00:15:57,900 --> 00:16:00,570 en als je typt je sh bash krijgen. 242 00:16:00,570 --> 00:16:05,020 Ze werden er proberen om u de meer geavanceerde versies van deze schelpen geven, 243 00:16:05,020 --> 00:16:07,940 maar dit kan verwarrend zijn. 244 00:16:07,940 --> 00:16:16,720 Als je een script schrijven met behulp van tcsh of Bash biedt tijdens het bellen csh of sh 245 00:16:16,720 --> 00:16:22,230 en dan proberen om het uit te voeren op een computer die niet tcsh of Bash heeft, 246 00:16:22,230 --> 00:16:25,050 je zou kunnen krijgen een aantal fouten als er commando's daar 247 00:16:25,050 --> 00:16:27,970 die deze schelpen niet herkent. 248 00:16:27,970 --> 00:16:34,120 Bovendien, je kan hebben op uw lokale computer heet uw shell 249 00:16:34,120 --> 00:16:37,700 noemde het als sh of csh en dan krijgt de meer geavanceerde schelpen. 250 00:16:37,700 --> 00:16:41,440 Je mag niet eens denken aan het feit dat je met behulp van de meer geavanceerde shell. 251 00:16:41,440 --> 00:16:45,670 Dus dit is een potentiële valkuil. 252 00:16:45,670 --> 00:16:50,290 Hoe staat vast dat als je typt sh je Bash, 253 00:16:50,290 --> 00:16:55,580 als je csh typt u tsch krijgen? 254 00:16:55,580 --> 00:16:59,940 Er zijn dingen in deze computers wel links 255 00:16:59,940 --> 00:17:06,460 die verbinding kan maken aan bestandsnamen om te verwijzen naar het zelfde ding. 256 00:17:06,460 --> 00:17:12,180 Het kan ofwel 2 namen voor dezelfde of een bestand waarvan het doel is om te verwijzen naar een ander bestand. 257 00:17:12,180 --> 00:17:17,550 Ze heten harde en symbolische links. We zullen niet in te gaan op dat niet meer vandaag. 258 00:17:17,550 --> 00:17:21,619 Er kunnen ook afzonderlijke bestanden - 1 bestand sh, 1 bestand Bash - 259 00:17:21,619 --> 00:17:23,880 maar ze lopen beide Bash. 260 00:17:23,880 --> 00:17:29,350 Dan is er hier nog een qualifier. 261 00:17:29,350 --> 00:17:42,640 Als je belt een van deze schelpen met een naam, 262 00:17:42,640 --> 00:17:46,640 je zou denken dat je zou dezelfde functionaliteit krijgen als het aanroepen van het onder een andere naam. 263 00:17:46,640 --> 00:17:49,700 Nou, dat is eigenlijk niet noodzakelijk waar. 264 00:17:49,700 --> 00:17:55,020 Deze commando's kunnen de naam waarmee ze werden genoemd onderzoeken 265 00:17:55,020 --> 00:18:00,020 en ze kunnen, op basis van die naam, zich anders gedragen. 266 00:18:00,020 --> 00:18:02,740 Er kunnen problemen proberen te voldoen aan een norm. 267 00:18:02,740 --> 00:18:06,060 Sommigen van jullie misschien wel eens gehoord van de POSIX-standaard of een andere, 268 00:18:06,060 --> 00:18:08,730 misschien andere functies. 269 00:18:08,730 --> 00:18:14,520 Dit kan soms worden geselecteerd door command line argumenten 270 00:18:14,520 --> 00:18:17,310 of door shell variabelen. 271 00:18:17,310 --> 00:18:22,170 Noemde het als sh of bash kan zelfs leiden tot een andere uitvoering 272 00:18:22,170 --> 00:18:25,300 zelfs als het hetzelfde bestand dat u uitvoeren. 273 00:18:25,300 --> 00:18:31,800 Een ander ding om te overwegen is dat zelfs als een andere computer heeft tcsh of Bash, 274 00:18:31,800 --> 00:18:35,310 als ze niet verbonden zijn zoals ze op uw lokale computer 275 00:18:35,310 --> 00:18:37,990 als je een Linux of Mac OS lokale computer, 276 00:18:37,990 --> 00:18:45,630 dan weer zul je de shell die je sh of csh noemen, niet degene die je misschien liever te krijgen. 277 00:18:50,430 --> 00:19:01,130 De huidige Bourne shell heeft verbeteringen minder dan die in Bash 278 00:19:01,130 --> 00:19:06,100 maar voorbij die in de originele Bourne shell. 279 00:19:06,100 --> 00:19:09,690 Als gevolg daarvan, zelfs de huidige Bourne shell, sh, 280 00:19:09,690 --> 00:19:14,560 zelfs wanneer het niet Bash, lijkt op de taal C meer dan de C-shell doet. 281 00:19:14,560 --> 00:19:20,460 Dat was niet het geval wanneer de C-shell voor het eerst werd gemaakt, maar het is op die manier ontwikkeld. 282 00:19:20,460 --> 00:19:26,560 Je zou hier opmerken dat al deze shell namen behalve de Bourne shell 283 00:19:26,560 --> 00:19:30,640 iets aan te geven welke shell ze zijn - csh, bash - 284 00:19:30,640 --> 00:19:32,550 maar de Bourne shell is gewoon sh. 285 00:19:32,550 --> 00:19:34,910 Waarom? Dat was de oorspronkelijke shell. 286 00:19:34,910 --> 00:19:37,770 Het was de shell dan, niet een schelp, 287 00:19:37,770 --> 00:19:41,090 en omdat het de shell, was er geen reden om het te onderscheiden van andere shell. 288 00:19:41,090 --> 00:19:45,030 Dus dat is de reden waarom het die naam heeft en nog steeds doet. 289 00:19:50,630 --> 00:19:58,990 >> Deze top is hier een regel uit een wachtwoord database account Ik heb er 290 00:19:58,990 --> 00:20:01,680 op een andere computer. 291 00:20:01,680 --> 00:20:08,300 Ik ga proberen om die naam te krijgen, zodat je dat deel kunt zien op het einde, de schelp. 292 00:20:09,720 --> 00:20:15,450 Het wachtwoord database bevat de login kenmerken voor alle gebruikers. 293 00:20:15,450 --> 00:20:20,330 In het begin is de gebruikersnaam, die u de laatste 2 letters van mij nu zien. 294 00:20:20,330 --> 00:20:23,970 De velden hier worden gescheiden door dubbele punten. 295 00:20:23,970 --> 00:20:28,210 Het laatste veld, zoals je kunt zien, is bin / tcsh, de schelp. 296 00:20:28,210 --> 00:20:30,230 Dat is de shell specifier. 297 00:20:30,230 --> 00:20:33,240 Er is iets interessants hier. 298 00:20:33,240 --> 00:20:36,950 Toen Unix eerst werd ontwikkeld, was er slechts 1 schelp, 299 00:20:36,950 --> 00:20:38,350 dus er was geen keuze daar. 300 00:20:38,350 --> 00:20:45,570 Dus waarom hebben ze laten een veld in het wachtwoord-database naar een shell te geven? 301 00:20:45,570 --> 00:20:47,920 Ik weet het niet, maar het is gelukkig dat ze deden. 302 00:20:47,920 --> 00:20:52,030 Het is nogal moeilijk om veranderingen in de wachtwoord database-indeling maken 303 00:20:52,030 --> 00:20:54,420 omdat veel programma's hebben betrekking op het formaat 304 00:20:54,420 --> 00:20:57,720 en zou moeten worden herschreven. 305 00:20:57,720 --> 00:21:04,130 Het is een gelukkige of toevallige ontwikkeling die zij opgenomen dat veld. 306 00:21:04,130 --> 00:21:12,780 Dat soort van een wachtwoord bestand regel wordt gebruikt op alle Unix-en Linux-computers voor zover ik weet. 307 00:21:12,780 --> 00:21:14,650 De Mac heeft een eigen systeem. 308 00:21:14,650 --> 00:21:17,810 Het heeft eigenlijk een wachtwoord bestand met de lijnen in dat formaat, 309 00:21:17,810 --> 00:21:21,060 maar niet wanneer de gebruiker zijn bepaald. 310 00:21:21,060 --> 00:21:24,200 Een andere terloopse opmerking daar. 311 00:21:36,470 --> 00:21:46,020 >> Als je belt een shell, kan je het noemen als een sub-shell van uw bestaande schelpen. 312 00:21:46,020 --> 00:21:50,480 Dus als ik ga hier, laten we ontdoen van deze dingen. 313 00:21:50,480 --> 00:21:53,350 Hier ben ik in de C-shell. 314 00:21:56,830 --> 00:22:01,200 Die variabele, die nauwkeurig identificeert mijn schelp, 315 00:22:01,200 --> 00:22:04,300 eigenlijk is het niet altijd een betrouwbare manier om te bepalen welke shell je draait, 316 00:22:04,300 --> 00:22:06,220 maar in dit geval is. 317 00:22:06,220 --> 00:22:08,040 Wat als ik typ - 318 00:22:09,970 --> 00:22:12,470 Nu ben ik in Bash. 319 00:22:12,470 --> 00:22:19,540 Sommige dingen zullen hetzelfde zijn. ls vertelt me ​​mijn commando's. 320 00:22:19,540 --> 00:22:24,500 Als ik een schorsing terug naar mijn C-shell, ls, hetzelfde. Rechts? 321 00:22:24,500 --> 00:22:28,890 fg, voorgrond, terug naar mijn Bash shell. 322 00:22:28,890 --> 00:22:38,290 dow, huidige directory, terug naar de C-shell. 323 00:22:38,290 --> 00:22:43,180 dow, andere directory - eigenlijk niet een andere directory in dit geval. 324 00:22:43,180 --> 00:22:45,110 Het is dezelfde directory. 325 00:22:45,110 --> 00:22:50,000 Laten we zeggen dat ik een commando wilt noemen hier: waar ls. 326 00:22:50,000 --> 00:22:52,140 Wat doet dat? 327 00:22:52,140 --> 00:22:53,670 Het vertelt me ​​waar de opdracht ls, 328 00:22:53,670 --> 00:22:56,670 degene die mij een directory listing geeft, ligt in ls. 329 00:22:56,670 --> 00:23:01,460 Laten we teruggaan naar Bash shell gaan. Laten we proberen hetzelfde. 330 00:23:01,460 --> 00:23:05,830 Hmm, interessant daar waar: command not found. 331 00:23:05,830 --> 00:23:07,400 Waarom is dat? 332 00:23:07,400 --> 00:23:11,570 Het waarbij opdracht is ingebouwd in de C-shell. 333 00:23:11,570 --> 00:23:15,630 Dit is niet een opdracht die moet worden gelezen in het geheugen van ergens anders en uitgevoerd. 334 00:23:15,630 --> 00:23:20,310 De C-shell loopt het door de overdracht van de uitvoering om een ​​deel van zijn eigen code 335 00:23:20,310 --> 00:23:22,790 en het is niet in de Bash shell. 336 00:23:22,790 --> 00:23:25,710 Dus Bash, niet met een dergelijke ingebouwde opdracht, zoekt het, vindt het niet, 337 00:23:25,710 --> 00:23:27,720 en we krijgen een foutmelding. 338 00:23:27,720 --> 00:23:32,290 Dus daar hebben we een Bash shell draaien onder een C-shell, en we noemen dat een sub-shell. 339 00:23:32,290 --> 00:23:38,480 En voor het geval je nieuwsgierig bent, Bash shell heeft zijn eigen manier van het vinden van opdrachten. 340 00:23:38,480 --> 00:23:42,590 hash verwijst naar het feit dat het sneller kan worden uitgevoerd, 341 00:23:42,590 --> 00:23:44,960 wordt sneller gevonden. 342 00:23:44,960 --> 00:23:48,610 Dat is een van de verbeteringen ingebouwd in een aantal van deze schelpen. 343 00:23:50,220 --> 00:23:54,200 >> Bourne-achtige schelpen hebben de voorkeur voor de programmering. 344 00:23:54,200 --> 00:23:57,300 Ze hebben controle structuren zoals lussen, conditionele statements, 345 00:23:57,300 --> 00:24:00,240 het soort opdrachten die u kunt gebruiken in programmeertalen zoals C 346 00:24:00,240 --> 00:24:04,190 of welke taal dan ook. Misschien bent u het programmeren in Java of wat dan ook. 347 00:24:04,190 --> 00:24:06,460 Shells hebben die ook. 348 00:24:06,460 --> 00:24:11,790 De Bourne-soort schelpen, vooral Bash, hebben meer 349 00:24:11,790 --> 00:24:15,730 en ze zijn ontworpen met een grotere flexibiliteit. 350 00:24:15,730 --> 00:24:20,700 De Bash shell heeft arrays. De originele Bourne shell niet. 351 00:24:20,700 --> 00:24:26,130 Zodat zijn aanzienlijk voordeel voor het programmeren. 352 00:24:26,130 --> 00:24:29,810 De C-shell eigenlijk wel arrays, maar heeft niet veel van deze andere functies. 353 00:24:29,810 --> 00:24:33,450 De Bourne-achtige shells sneller uitvoeren 354 00:24:33,450 --> 00:24:36,520 als ze niet de kenmerken bestemd voor interactief gebruik. 355 00:24:36,520 --> 00:24:39,340 U laadt dingen naar beneden voor een doel, dit laadt ze naar beneden voor een ander doel. 356 00:24:39,340 --> 00:24:41,520 Daar is die trade-off daar. 357 00:24:41,520 --> 00:24:44,510 Die functies die bestemd zijn voor interactief gebruik 358 00:24:44,510 --> 00:24:46,920 werkelijk zijn van weinig of geen nut voor scripting. 359 00:24:46,920 --> 00:24:52,160 Het is mogelijk om een ​​interactieve sub-shell gebruiken, net zoals degene die ik daar begonnen 360 00:24:52,160 --> 00:24:57,780 aan het testen van commando's die u wilt gebruiken in een script. 361 00:24:57,780 --> 00:25:01,180 Dat is wat je niet kunt doen met perl. U kunt dit doen met de schelpen. 362 00:25:01,180 --> 00:25:04,850 Zelfs de structuren zoals lussen en dergelijke kunnen interactief worden uitgevoerd. 363 00:25:04,850 --> 00:25:07,000 Ze zijn soms nuttig om interactief draaien, 364 00:25:07,000 --> 00:25:10,180 maar meer waarschijnlijk dat je ze met behulp van een script te ontwikkelen. 365 00:25:15,690 --> 00:25:17,400 >> Alias. 366 00:25:17,400 --> 00:25:21,630 Dit gaat worden over de C-shell. 367 00:25:23,270 --> 00:25:27,570 Geschiedenis mechanisme waar u terug naar eerdere opdrachten te krijgen 368 00:25:27,570 --> 00:25:30,340 of delen daarvan die je al hebt draaien. 369 00:25:30,340 --> 00:25:33,680 Nogmaals, over de C-shell, de Bourne shell en de Korn shell hebben deze dingen, 370 00:25:33,680 --> 00:25:35,620 maar ik ben niet van plan om in hen. 371 00:25:35,620 --> 00:25:40,340 Dus hier zijn enkele nuttige aliassen die ik heb. 372 00:25:43,100 --> 00:25:44,880 In plaats van het typen van ls - het is een gemeenschappelijk commando - 373 00:25:44,880 --> 00:25:47,620 typ je gewoon l en bespaar jezelf 1 karakter. 374 00:25:47,620 --> 00:25:50,600 ls met verschillende opties, al die werkzaamheden. 375 00:25:50,600 --> 00:25:54,460 Merk op dat deze definities hebben aanhalingstekens om hen heen. 376 00:25:54,460 --> 00:25:57,520 In deze gevallen de aanhalingstekens zijn niet nodig. 377 00:25:57,520 --> 00:26:00,100 Als je die aliassen kunt definiëren zonder de aanhalingstekens, zou het nog steeds werken. 378 00:26:00,100 --> 00:26:02,910 Ze worden aanbevolen. 379 00:26:02,910 --> 00:26:04,900 Er zijn situaties waarin u de offerte niet kunt gebruiken 380 00:26:04,900 --> 00:26:08,050 omdat je iets te gebeuren waar de offerte zou willen voorkomen. 381 00:26:08,050 --> 00:26:11,210 Soms kun je een deel van de definitie citeren, maar niet alles. 382 00:26:11,210 --> 00:26:17,010 Het is ook in het algemeen aan te raden om enkele aanhalingstekens in plaats van dubbele aanhalingstekens te gebruiken. 383 00:26:17,010 --> 00:26:19,750 Dubbele aanhalingstekens gevolgen hebben voor de variabele definities, 384 00:26:19,750 --> 00:26:22,950 waardoor ze bijzonder te evalueren plaats stoppen. 385 00:26:22,950 --> 00:26:25,910 Waarom zouden we willen de evaluatie stoppen? 386 00:26:25,910 --> 00:26:28,710 En hoe doe citaten die voor ons doen? 387 00:26:28,710 --> 00:26:32,600 >> Hier is een opdracht die je interessant vindt. 388 00:26:32,600 --> 00:26:35,470 'Ls g *' 389 00:26:35,470 --> 00:26:37,640 g *, zoals u waarschijnlijk weet, is een wildcard uitdrukking 390 00:26:37,640 --> 00:26:40,290 voor alle bestandsnamen beginnend met g. 391 00:26:40,290 --> 00:26:46,410 Als ik schrijf gewoon in een commando ls g *, zal ik een lijst van al die namen in mijn huidige directory. 392 00:26:46,410 --> 00:26:50,870 Als ik definiëren dat alias als hier met de aanhalingstekens, 393 00:26:50,870 --> 00:26:56,990 het zal dat commando uitvoert in je huidige directory waar je het draait. 394 00:26:56,990 --> 00:27:01,250 Maar als je de alias definitie draaien zonder de aanhalingstekens, 395 00:27:01,250 --> 00:27:09,620 het zal de wildcard g * evalueren wanneer het loopt dit cruciale opdracht. 396 00:27:09,620 --> 00:27:14,400 Dus de definitie van het alias zal worden ls gevolgd door de lijst met bestanden in de directory 397 00:27:14,400 --> 00:27:16,310 waarin de alias opdracht wordt uitgevoerd, 398 00:27:16,310 --> 00:27:19,180 ongeacht waar je eigenlijk van plan om de opdracht uit te voeren. 399 00:27:19,180 --> 00:27:26,360 Dit is niet veel te gebruiken, en de enkele aanhalingstekens voorkomen dat de evaluatie van het sterretje. 400 00:27:26,360 --> 00:27:30,780 Dus je krijgt gewoon de definitie wezen ls g *. 401 00:27:30,780 --> 00:27:35,510 Dan, lgs, vervolgens zet wanneer u de alias lopen dat uit. 402 00:27:35,510 --> 00:27:40,490 Nu zijn er geen aanhalingstekens, en het zal het sterretje beoordelen als u het alias commando uitvoeren. 403 00:27:40,490 --> 00:27:43,900 Dus dat is een ding. 404 00:27:43,900 --> 00:27:46,590 Dubbele aanhalingstekens zou dat hetzelfde effect hier hebben, 405 00:27:46,590 --> 00:27:50,580 maar er zijn andere gevallen waarin dubbele aanhalingstekens niet zo goed zou werken. 406 00:27:50,580 --> 00:27:52,450 >> Hier is een andere. 407 00:27:52,450 --> 00:27:54,270 Misschien ken je het grep commando. 408 00:27:54,270 --> 00:28:02,110 De grep commando kan worden gebruikt om een ​​bestand voor lijnen die bepaalde snaren scannen. 409 00:28:02,110 --> 00:28:10,350 Dus laten we gaan hier en ik zal verlaten mijn Bourne shell. 410 00:28:23,570 --> 00:28:25,450 Oke. Hier is een bestand. 411 00:28:25,450 --> 00:28:31,490 Laten we zeggen dat het grep abc snaren. Daar is het. 412 00:28:31,490 --> 00:28:37,930 Als ik dat doe grep zddd, krijg ik niets. Oke. 413 00:28:37,930 --> 00:28:40,960 Het vindt zo een string, hij rapporteert het niet vinden, het niet melden. 414 00:28:40,960 --> 00:28:44,930 Het uitgangen elke lijn die die string op het heeft. 415 00:28:44,930 --> 00:28:49,080 Er zijn allerlei opties hier die u kunt vinden in de documentatie. 416 00:28:49,080 --> 00:28:52,160 Hier is een manier om het te doen. 417 00:28:52,160 --> 00:29:03,290 Wat dacht je van deze, alias grabc 'grep abc'? 418 00:29:03,290 --> 00:29:09,000 Dat gaat 1 argument omvatten wanneer de alias wordt gedefinieerd. 419 00:29:09,000 --> 00:29:26,300 Dus als ik dat hier, als ik nu grabc doen, 420 00:29:26,300 --> 00:29:30,620 nu de alias omvat meer dan het simpel commando. Het heeft ook het argument. 421 00:29:30,620 --> 00:29:32,190 Tot dusver dat werkt. 422 00:29:32,190 --> 00:29:38,590 Ik heb een andere opdracht hier, dit een, dus die zijn verschillende strings daar 423 00:29:38,590 --> 00:29:46,790 en laten zien dat dit niet er iets vinden, omdat het niet overeenkomt. 424 00:29:46,790 --> 00:29:56,180 >> Wat als ik wil in de alias definitie op te nemen van het bestand dat ik ga zoeken 425 00:29:56,180 --> 00:30:02,970 en ik wil geven als argument voor de alias van de string die ik zoek? 426 00:30:02,970 --> 00:30:08,040 Ik zou willen zeggen abc als argument naar mijn alias, 427 00:30:08,040 --> 00:30:10,870 maar de alias al het bestand bepaald. 428 00:30:10,870 --> 00:30:15,710 En dat is waar deze uitdrukking komt inch 429 00:30:20,430 --> 00:30:25,270 Let hier hebben we grep net als voorheen. 430 00:30:25,270 --> 00:30:28,130 We hebben het bestand hier, strijkers. 431 00:30:28,130 --> 00:30:35,610 \! ^, Soort van een vreemde uitdrukking, denk ik, als je dit nog niet eerder hebben gezien. 432 00:30:35,610 --> 00:30:39,920 Uitroepteken is onderdeel van de C-shell geschiedenis mechanisme. 433 00:30:39,920 --> 00:30:45,220 Het kan eerder commando oproepen kan argumenten herinneren om die commando enzovoort. 434 00:30:46,760 --> 00:31:01,570 De geschiedenis mechanisme wordt gebruikt als onderdeel van aliasing. 435 00:31:01,570 --> 00:31:07,390 Als je een lijn na het uitroepteken opgeeft, zal het verwijzen naar die lijn in de geschiedenis lijst, 436 00:31:07,390 --> 00:31:11,910 die we niet zullen krijgen in nu want het is een heel ander onderwerp. 437 00:31:11,910 --> 00:31:16,280 Het is mogelijk om een ​​deel van een lijn opgeven. 438 00:31:16,280 --> 00:31:22,950 Dus! 03:02 zou het tweede argument van het commando nummer 3 zijn. 439 00:31:22,950 --> 00:31:30,430 Het dakje hier in deze uitdrukking staat voor het eerste argument. 440 00:31:30,430 --> 00:31:34,410 Als je niet geven een indicatie van welk commando je bedoelt, 441 00:31:34,410 --> 00:31:37,300 het verwijst naar het laatst gebruikte commando, 442 00:31:37,300 --> 00:31:41,990 en het dakje is een symbool voor het eerste argument. 443 00:31:41,990 --> 00:31:46,820 Omdat het de dakje en niet het aantal, hoeft u niet om de dikke darm te gebruiken, 444 00:31:46,820 --> 00:31:52,660 dus! ^ betekent dat het eerste argument om het vorige commando. 445 00:31:52,660 --> 00:31:55,020 Een beetje gemengd hier boven. 446 00:31:55,020 --> 00:31:58,450 In dit geval, wanneer je dit gebruikt als alias definitie 447 00:31:58,450 --> 00:32:04,650 de geschiedenis verwijzing verwijst naar de commando's waarin de alias wordt gebruikt. 448 00:32:04,650 --> 00:32:08,470 Dus dit is terug te gaan 1 commando als een geschiedenis operatie, 449 00:32:08,470 --> 00:32:11,810 maar als een alias operatie het verwijst naar het commando waarin u typt, 450 00:32:11,810 --> 00:32:14,780 zeggen, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Wij hebben de citaten hier in. Wat is de backslash voor? 452 00:32:20,240 --> 00:32:30,810 In dit geval, net als elders, we willen niet de geschiedenis mechanisme uitvoeren 453 00:32:30,810 --> 00:32:33,680 terwijl het definiëren van de alias. 454 00:32:33,680 --> 00:32:37,900 Als we de backslash daar niet hebben, zou de shell trekken in het eerste argument 455 00:32:37,900 --> 00:32:41,870 van het commando vlak voordat het liep deze alias commando, dat willen we niet. 456 00:32:41,870 --> 00:32:47,520 We willen dat dit wordt ingebouwd in de alias commando om later te bellen in een argument. 457 00:32:47,520 --> 00:32:53,550 Enkele aanhalingstekens ontsnappen niet aan een uitroepteken, de geschiedenis referentie. 458 00:32:53,550 --> 00:32:57,450 Misschien ken je de uitdrukking ontsnapping betekent om de betekenis van iets te veranderen. 459 00:32:57,450 --> 00:33:00,260 In dit geval betekent iets van met een bijzondere betekenis stoppen. 460 00:33:00,260 --> 00:33:03,030 Uitroepteken speciale betekenis is geschiedenis. 461 00:33:03,030 --> 00:33:05,790 Ontsnappen en het niet die betekenis hebben. 462 00:33:05,790 --> 00:33:08,080 Quotes doen dat niet; backslash doet. 463 00:33:08,080 --> 00:33:11,900 Dus we daadwerkelijk gebruik van 2 verdiepingen van hier ontsnappen. 464 00:33:23,500 --> 00:33:29,620 Ik ga deze opdracht verplaatsen naar het andere venster zonder te typen 465 00:33:29,620 --> 00:33:35,210 met behulp van deze bewerkingen, die u misschien nuttig vindt. 466 00:33:40,620 --> 00:33:42,460 Iets anders hier Ik zal je laten zien. 467 00:33:42,460 --> 00:33:46,730 Als je typt gewoon alias zonder argumenten, het vertelt je al je argumenten. 468 00:33:46,730 --> 00:33:48,640 Dit is een bos van aliassen ik had hier al 469 00:33:48,640 --> 00:33:53,400 naast die die ik heb gebruikt hier vandaag. 470 00:33:53,400 --> 00:34:00,220 Maar als ik typ gewoon de naam van een alias, vertelt me ​​wat het betekent. 471 00:34:00,220 --> 00:34:03,390 Merk op dat de citaten zijn verdwenen en de backslash is verdwenen. 472 00:34:03,390 --> 00:34:08,620 Deze tekenreeks hier het resultaat van die alias definitie 473 00:34:08,620 --> 00:34:12,199 en nu is het gewoon! ^ in. 474 00:34:12,199 --> 00:34:19,150 Dit is gaan kijken in het bestand snaren voor alles. 475 00:34:19,150 --> 00:34:34,900 Dus als ik dat doe grstrings_file snaren, heb ik niet geven niets om te zoeken naar daar, 476 00:34:34,900 --> 00:34:37,429 maar het ziet er in strings. 477 00:34:37,429 --> 00:34:42,330 Het zag er niet het woord snaren vinden in het bestand strijkers, maar het doet vinden abc. 478 00:34:42,330 --> 00:34:46,770 En het maakt niet vinden dat. 479 00:34:46,770 --> 00:34:52,330 Dus hier geven we een argument dat raakt in de omschrijving van de alias, 480 00:34:52,330 --> 00:34:55,530 die in het in. 481 00:34:55,530 --> 00:34:58,540 Het is waar deze uitdrukking vandaan komt. 482 00:34:58,540 --> 00:35:00,240 U kunt meer dan 1 te gebruiken. 483 00:35:00,240 --> 00:35:03,170 Het dakje is een symbool voor het eerste argument. 484 00:35:03,170 --> 00:35:07,510 Als je wilde een tweede argument te gebruiken, zou je dan zeggen: 2. 485 00:35:07,510 --> 00:35:11,250 Er is geen speciaal symbool voor het tweede argument. 486 00:35:11,250 --> 00:35:14,790 En omdat je met behulp van een cijfer, zou je de dikke darm te gebruiken. 487 00:35:14,790 --> 00:35:17,220 Er is echter een keuze hier. 488 00:35:17,220 --> 00:35:21,220 Het dollarteken staat voor het laatste argument. 489 00:35:21,220 --> 00:35:23,320 En omdat dit een symbool, kunt u de dikke darm weg te laten. 490 00:35:23,320 --> 00:35:25,870 Dus het zou het laatste argument in de lijst zijn. 491 00:35:25,870 --> 00:35:27,900 En er is ook die ene. 492 00:35:27,900 --> 00:35:31,380 Asterisk betekent alles, dus dit is de complete lijst met argumenten, 493 00:35:31,380 --> 00:35:35,150 en weer, kunt u de dikke darm weg te laten, want het is niet een cijfer. 494 00:35:36,970 --> 00:35:39,950 Ik hoop dat je alles bekijkt deze allemaal. 495 00:35:39,950 --> 00:35:54,100 >> De geschiedenis mechanisme kan terug naar vroegere lijnen gaan in de geschiedenis lijst. 496 00:35:54,100 --> 00:36:01,370 Je kan dit doen in een alias definitie. 497 00:36:01,370 --> 00:36:02,950 Ik heb nog nooit gedaan. 498 00:36:02,950 --> 00:36:05,840 Het zou tot gevolg trekken uit eerdere opdrachten van de geschiedenis lijst 499 00:36:05,840 --> 00:36:08,130 wanneer u de alias, die kunnen verschillende opdrachten uit te voeren 500 00:36:08,130 --> 00:36:11,240 afhankelijk van waar en wanneer u het uit te voeren. 501 00:36:11,240 --> 00:36:14,020 Denkbaar je zou willen trekken uit een dergelijke verwijzing 502 00:36:14,020 --> 00:36:15,900 gewoon weten wat een eerdere opdracht was. 503 00:36:15,900 --> 00:36:17,280 Ik heb nog nooit zien gebeuren. 504 00:36:17,280 --> 00:36:19,970 Ik veronderstel dat iemand zou willen, maar dit is zeer onwaarschijnlijk. 505 00:36:19,970 --> 00:36:26,480 Er is nog een ding hier. 506 00:36:26,480 --> 00:36:33,060 Als je die geschiedenis-type-aanduiding gebruiken, 507 00:36:33,060 --> 00:36:38,190 dan is alleen de argumenten waarop er verwezen worden gebruikt. 508 00:36:38,190 --> 00:36:42,180 Als u een alias definitie, die een geschiedenis-type-aanduiding niet gebruikt, 509 00:36:42,180 --> 00:36:44,060 als het wordt slechts het begin van het commando 510 00:36:44,060 --> 00:36:46,520 en je hebt andere argumenten, dan alles wat je typt na dat 511 00:36:46,520 --> 00:36:48,450 wordt toegevoegd aan het commando. 512 00:36:48,450 --> 00:36:52,040 In dit geval is het voorbeeld dat ik gaf er gewoon, we gebruikten het eerste argument; 513 00:36:52,040 --> 00:36:54,610 we hebben geen anderen gebruiken. 514 00:36:54,610 --> 00:36:57,960 Als andere argumenten had gekregen op de commandoregel, zouden ze niet worden gebruikt. 515 00:36:57,960 --> 00:37:04,630 Dus als je de geschiedenis verwijzing gebruiken helemaal niet, dan moet je het gebruiken om elk argument te krijgen. 516 00:37:04,630 --> 00:37:11,310 >> Er is nog iets hier Ik wil gewoon om op te noemen, mede haakjes, 517 00:37:11,310 --> 00:37:15,250 namelijk dat deze geschiedenis mechanisme met het uitroepteken 518 00:37:15,250 --> 00:37:18,010 gaat terug naar de oorspronkelijke C-shell. 519 00:37:18,010 --> 00:37:27,060 De tcsh introduceerde geschiedenis operaties 520 00:37:27,060 --> 00:37:30,910 waarin de soorten opdrachten en snaren van de editors, 521 00:37:30,910 --> 00:37:33,650 ofwel Emacs of vi. 522 00:37:33,650 --> 00:37:36,430 Mijn persoonlijke mening is Emacs is veel gemakkelijker te gebruiken voor dit doel 523 00:37:36,430 --> 00:37:39,390 zelfs als u vi gebruiken voor uw reguliere bewerken. 524 00:37:39,390 --> 00:37:43,900 Er zijn verschillende Emacs commando's die nu worden aangepast voor de geschiedenis. 525 00:37:43,900 --> 00:37:46,410 Controle P krijgt de vorige regel in de geschiedenis lijst. 526 00:37:46,410 --> 00:37:48,840 Een andere controle P krijgt u de ene daarvoor. 527 00:37:48,840 --> 00:37:50,540 De pijl doet hetzelfde. 528 00:37:50,540 --> 00:37:54,190 Controle N krijgt de volgende opdracht als u al hebt gebladerd terug sommige opzichten. 529 00:37:54,190 --> 00:37:55,880 Pijl naar beneden doet dat ook. 530 00:37:55,880 --> 00:38:00,480 Je kunt verplaatsen van links naar rechts met de pijlen en diverse andere dingen. 531 00:38:00,480 --> 00:38:02,390 Dit kan gebruik maken van de geschiedenis mechanisme 532 00:38:02,390 --> 00:38:05,070 veel gemakkelijker dan het gebruik van het uitroepteken syntax, 533 00:38:05,070 --> 00:38:07,930 maar je zou dat niet gebruiken in een alias definitie. 534 00:38:17,780 --> 00:38:20,020 We zullen gaan over dat een andere keer. 535 00:38:24,300 --> 00:38:25,810 >> Variabelen. 536 00:38:26,880 --> 00:38:29,510 Je weet wat variabelen zijn in programmeertalen. 537 00:38:29,510 --> 00:38:31,680 De schelpen hebben ze ook. 538 00:38:31,680 --> 00:38:37,350 De C-shell gebruikt de commando set om variabelen toe te kennen, 539 00:38:37,350 --> 00:38:41,360 zodat een variabele wordt ingesteld op de waarde van B - 540 00:38:41,360 --> 00:38:46,390 zoals ik al zei, een nutteloze definitie, maar een illustratie van hoe deze wordt gebruikt. 541 00:38:48,790 --> 00:38:52,410 De set commando zal een variabele als deze nog niet bestaat. 542 00:38:55,270 --> 00:39:02,490 De positionele parameters voor shell scripts kunnen worden beschouwd variabelen, 543 00:39:02,490 --> 00:39:10,750 maar het gebruik ervan en de regels voor hen zijn iets anders. 544 00:39:10,750 --> 00:39:14,320 U kunt een waarde toewijzen aan $ 1 in de loop van een script. 545 00:39:14,320 --> 00:39:18,340 U zou hebben om een ​​nieuwe variabele te definiëren voor dat doel als sommige van je wilde. 546 00:39:23,000 --> 00:39:28,470 Typ set zonder argumenten en krijg je een lijst van alle momenteel gedefinieerde variabelen. 547 00:39:28,470 --> 00:39:34,220 En laten we over aan mijn andere shell hier en zien wat we krijgen als we dat doen. 548 00:39:34,220 --> 00:39:37,110 Een behoorlijk lange lijst daar, toch? 549 00:39:37,110 --> 00:39:40,990 Blader omhoog een beetje. Kijk eens naar al die. 550 00:39:40,990 --> 00:39:44,330 Sommige van deze dingen worden automatisch gedefinieerd door de shell. 551 00:39:44,330 --> 00:39:49,320 De schaal creëert de variabele en geeft het een waarde. 552 00:39:49,320 --> 00:39:52,730 Sommigen van hen worden bepaald door de shell, maar dan opnieuw door de gebruiker 553 00:39:52,730 --> 00:39:54,820 volgens zijn voorkeur. 554 00:39:54,820 --> 00:39:59,110 En sommigen van hen zijn gemaakt door de gebruiker, afhankelijk van wat hij doet die dag. 555 00:39:59,110 --> 00:40:01,880 Dat is gewoon ingesteld zonder argumenten. 556 00:40:06,920 --> 00:40:10,050 Er is een vreemde eigenschap hier van dit ding. 557 00:40:10,050 --> 00:40:17,980 Er moet ofwel geen spaties tussen de gelijk-teken en de naam van de variabele te zijn 558 00:40:17,980 --> 00:40:23,700 en de waarde of ruimten aan beide zijden van het gelijkteken, 559 00:40:23,700 --> 00:40:28,940 zoals in deze. 560 00:40:35,620 --> 00:40:41,340 Dit zal niet werken, en dit is eigenlijk een geldige opdracht 561 00:40:41,340 --> 00:40:43,390 maar het zal niet doen wat je van plan bent. 562 00:40:43,390 --> 00:40:50,070 Dat bevel zal werken, want als je net set en een variabele naam 563 00:40:50,070 --> 00:40:54,890 zonder gelijk-teken of stel en een variabele naam met een gelijk-teken en geen waarde, 564 00:40:54,890 --> 00:40:57,770 het zal de variabele ingesteld op een waarde van nul. 565 00:40:57,770 --> 00:41:00,120 Dus stel een = is een geldige opdracht. 566 00:41:00,120 --> 00:41:04,370 De set commando kan meer dan 1 variabele definiëren op dezelfde lijn. 567 00:41:04,370 --> 00:41:11,240 Dus deze opdracht hier heeft het effect van het definiëren van zowel a en b op null. 568 00:41:11,240 --> 00:41:13,470 Waarschijnlijk niet wat je wilt. 569 00:41:13,470 --> 00:41:17,940 Deze hier, eerder vermeld, zal leiden tot een fout 570 00:41:17,940 --> 00:41:21,270 omdat = b niet een geldige expressie. 571 00:41:21,270 --> 00:41:23,680 Een variabele naam mag niet beginnen met het is gelijk teken. 572 00:41:26,760 --> 00:41:29,080 En er zijn deze verdere dingen hier. 573 00:41:29,080 --> 00:41:36,820 De dubbele punten werden gebruikt om argumenten uit de geschiedenis regels te selecteren, 574 00:41:36,820 --> 00:41:41,210 en ze kunnen worden gebruikt - en ik wilde niet in gaan voor - om die dingen aan te passen. 575 00:41:41,210 --> 00:41:44,480 Ze kunnen ook worden gebruikt om shellvariabelen wijzigen. 576 00:41:44,480 --> 00:41:49,050 Deze hier, $ a, heeft een waarde. 577 00:41:49,050 --> 00:41:55,040 : R zal opstijgen een extensie. 578 00:41:55,040 --> 00:41:57,200 Een uitbreiding zal alles na een dot be, 579 00:41:57,200 --> 00:41:59,200 een punt en iets na het einde van een bestand, 580 00:41:59,200 --> 00:42:03,230 pas aan het einde van de lijst na de laatste slash. 581 00:42:03,230 --> 00:42:05,480 Dus ik heb het hier. 582 00:42:05,480 --> 00:42:10,730 een is dat. Het zal laten vallen. O.. 583 00:42:10,730 --> 00:42:16,510 Als er geen verlenging, alleen de padnamen na de laatste slash, zal het geen effect hebben. 584 00:42:16,510 --> 00:42:27,480 a: h, dat variabele expressie, zal opstijgen het laatste element van een directory lijst, 585 00:42:27,480 --> 00:42:29,660 nogmaals, pas na de laatste slash. 586 00:42:29,660 --> 00:42:33,160 Dus / a / b / c wordt / a / b, 587 00:42:33,160 --> 00:42:38,870 maar deze is veranderd, omdat het element nadat de lijst is null. 588 00:42:38,870 --> 00:42:43,070 Hier is er iets wat ik ook wil benadrukken. 589 00:42:43,070 --> 00:42:46,770 Deze qualifiers niet zoeken naar het bestaan ​​van deze bestanden. 590 00:42:46,770 --> 00:42:48,910 Ze gewoon op zoek naar strijkers. 591 00:42:48,910 --> 00:42:54,520 Deze zijn bedoeld om bestandsnamen te manipuleren, padnamen, 592 00:42:54,520 --> 00:42:57,520 maar ze kunnen worden gebruikt op elke snaar ook al is het niet een bestandsnaam. 593 00:42:57,520 --> 00:42:58,920 En ze niet op zoek naar het bestaan, 594 00:42:58,920 --> 00:43:03,550 dus als er geen dergelijk bestand, / a / b / c, dit zal nog steeds werken. 595 00:43:03,550 --> 00:43:06,930 Of het nu van enig nut is een andere vraag, maar het werkt nog steeds. 596 00:43:06,930 --> 00:43:12,850 Variabelen zijn verschillend in de Bourne schelpen. We zullen later op terug. 597 00:43:12,850 --> 00:43:18,240 Dollarteken kunnen worden overgeslagen, net als het uitroepteken en het sterretje. 598 00:43:18,240 --> 00:43:21,760 Teken van de dollar kan worden met een backslash of de enkele aanhalingstekens. 599 00:43:21,760 --> 00:43:24,790 Dubbele aanhalingstekens hebben de oneven effect in alle schelpen 600 00:43:24,790 --> 00:43:28,690 dwingen de evaluatie van een dollarteken variabele expressie. 601 00:43:28,690 --> 00:43:31,960 Dus als het wordt ontsnapt op een manier, kan de dubbele aanhalingstekens het effect 602 00:43:31,960 --> 00:43:34,380 van het veroorzaken van het toch te worden geëvalueerd. 603 00:43:34,380 --> 00:43:37,090 Dit is een beetje verwarrend. 604 00:43:37,090 --> 00:43:43,740 Als er meerdere niveaus te ontsnappen, zoals enkele aanhalingstekens binnen dubbele aanhalingstekens 605 00:43:43,740 --> 00:43:46,770 of dubbele aanhalingstekens binnen enkele aanhalingstekens, moet je testen om te zien wat er zal gebeuren 606 00:43:46,770 --> 00:43:49,520 aan een variabele als je gebruik van een. 607 00:43:49,520 --> 00:43:53,410 Die 2 situaties - dubbele binnenkant van single, een binnenzak van dubbele - 608 00:43:53,410 --> 00:43:55,980 niet noodzakelijkerwijs je hetzelfde resultaat. 609 00:44:02,520 --> 00:44:05,600 Omgevingsvariabelen, gebonden C-shell variabelen. 610 00:44:05,600 --> 00:44:08,340 Omgevingsvariabelen zijn ook variabelen in de C-shell, 611 00:44:08,340 --> 00:44:11,250 en ze zijn ook variabelen in andere shells ook. 612 00:44:11,250 --> 00:44:15,230 In de C-schaal, ze onderscheiden typen. 613 00:44:15,230 --> 00:44:18,130 De dingen die ik eerder zeggen zijn over shell variabelen. 614 00:44:18,130 --> 00:44:21,300 Omgevingsvariabelen zijn een afzonderlijke reeks van variabelen 615 00:44:21,300 --> 00:44:28,650 met uitzondering van enkele variabelen die we gebonden variabelen noemen, 616 00:44:28,650 --> 00:44:30,640 die zijn erg belangrijk en we zullen later krijgen in deze. 617 00:44:30,640 --> 00:44:34,950 Omgevingsvariabelen worden automatisch doorgegeven 618 00:44:34,950 --> 00:44:41,800 naar schelpen of opdrachten die worden uitgevoerd vanuit je shell. 619 00:44:41,800 --> 00:44:46,220 De andere dingen niet. De shell-variabelen, de aliassen zijn niet. Omgevingsvariabelen zijn. 620 00:44:46,220 --> 00:44:48,630 Daarom noemen we ze omgevingsvariabelen, 621 00:44:48,630 --> 00:44:55,030 het idee is dat de omgeving zich voorbij gewoon je huidige shell. 622 00:44:55,030 --> 00:45:00,510 Ze kunnen worden gebruikt om dingen op commando definiëren. 623 00:45:00,510 --> 00:45:05,470 Hier is een voorbeeld. PRINTER, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Deze beide variabelen kan een printer die een commando zal gebruiken om dingen te drukken definiëren. 625 00:45:12,270 --> 00:45:16,500 Als u meerdere printers rond, wilt u misschien degene die je wilt zetten. 626 00:45:16,500 --> 00:45:21,320 De reden dat we 2 variabelen is dat verschillende reeksen commando's werden geschreven 627 00:45:21,320 --> 00:45:23,870 vanuit deze verschillende variabelen. 628 00:45:23,870 --> 00:45:25,910 U kunt hen geven verschillende waarden. 629 00:45:25,910 --> 00:45:28,860 De meeste kans dat je ze allebei dezelfde waarde te geven. 630 00:45:28,860 --> 00:45:35,840 Die dingen werken omdat de commando's die afdrukken doen 631 00:45:35,840 --> 00:45:40,740 waren geprogrammeerd om de waarden van deze variabelen te onderzoeken. 632 00:45:42,200 --> 00:45:46,150 Als een programma niet werden geschreven op die manier, als het ware geschreven om iets anders te doen, 633 00:45:46,150 --> 00:45:48,280 variabele zou irrelevant. 634 00:45:48,280 --> 00:45:52,530 Dus het besturingssysteem is niet op zoek naar deze variabelen 635 00:45:52,530 --> 00:45:55,210 elke keer dat u verwijzen naar een printer. 636 00:45:55,210 --> 00:45:59,090 Een opdracht die afdrukken doet is op zoek naar deze variabelen als deze is geprogrammeerd op die manier. 637 00:46:11,030 --> 00:46:15,240 Deze variabelen worden vaak gedefinieerd in uw initialisatie bestanden 638 00:46:15,240 --> 00:46:19,440 maar niet noodzakelijkerwijs. 639 00:46:19,440 --> 00:46:21,050 U kunt ze op de commandoregel te definiëren. 640 00:46:21,050 --> 00:46:24,090 Ze kunnen worden gedefinieerd in een commando. 641 00:46:24,090 --> 00:46:28,740 Een opdracht die iets loopt misschien haar eigen selectie van variabelen - 642 00:46:28,740 --> 00:46:32,390 variabelen die uniek zijn voor een bepaald softwarepakket zijn bijvoorbeeld. 643 00:46:32,390 --> 00:46:36,740 Deze worden nader bepaald wanneer u dat pakket uit te voeren. 644 00:46:39,690 --> 00:46:42,680 Hoe worden deze variabelen doorgegeven aan een sub-shell? 645 00:46:42,680 --> 00:46:48,210 Wanneer een sub-shell is geschreven, is het niet schrijven in dat gebied. 646 00:46:48,210 --> 00:46:53,260 Het gebied van de sub-shell die is gewijd aan omgevingsvariabelen 647 00:46:53,260 --> 00:46:56,450 is niet geschreven door de sub-shell, het is geschreven door het kopiëren. 648 00:46:56,450 --> 00:47:00,530 Wanneer u een gewone opdracht hebt uitgevoerd, zoals deze opdrachten om af te drukken of wat dan ook, 649 00:47:00,530 --> 00:47:03,840 ze beginnen met het creëren van een nieuwe shell. 650 00:47:03,840 --> 00:47:06,190 De shell zorgt voor een shell en dan overschrijft deel ervan 651 00:47:06,190 --> 00:47:08,800 met de opdracht die je draait, dat is een beetje verwarrend, 652 00:47:08,800 --> 00:47:10,740 maar dat is hoe deze commando's krijgen de omgevingsvariabelen 653 00:47:10,740 --> 00:47:14,890 dat ze dan verwijzen naar later. 654 00:47:21,920 --> 00:47:28,010 Het commando hier voor het definiëren van de variabele setenv. 655 00:47:28,010 --> 00:47:36,470 Dat is hoe je het definieert. Het is 3 elementen: setenv, variabele waarde. 656 00:47:36,470 --> 00:47:44,710 Als je gewoon SetEnv zonder argumenten, wat krijg je dan? 657 00:47:47,220 --> 00:47:48,810 Een overzicht van al deze variabelen. 658 00:47:48,810 --> 00:47:53,190 Nogmaals, het is een mooie lange lijst en in dit geval, net als in de andere, 659 00:47:53,190 --> 00:47:57,320 deze variabelen worden grotendeels bepaald door mijn inloggegevens operatie door de shell zelf 660 00:47:57,320 --> 00:47:59,740 eerder dan door alles wat ik deed. 661 00:47:59,740 --> 00:48:03,580 Er is nog een commando hier, printenv. 662 00:48:07,520 --> 00:48:10,340 Dat drukt ook uit het milieu. 663 00:48:10,340 --> 00:48:15,240 Merken dit laatste wat hier, EDITOR = vi. 664 00:48:15,240 --> 00:48:21,120 Dat zegt dat als ik gebruik iets dat een editor noemt 665 00:48:21,120 --> 00:48:25,530 en ik heb niet een editor opgeven en het laat me de keuze, kan het me vi geven. 666 00:48:25,530 --> 00:48:37,280 Wat als ik doe printenv editor? Het vertelt me ​​wat het is. 667 00:48:37,280 --> 00:48:41,340 Vlak voor dat, was er een variabele, MINDER. 668 00:48:41,340 --> 00:48:46,040 Dit zijn uw standaardinstellingen opties wanneer ik de opdracht less, 669 00:48:46,040 --> 00:48:49,360 die worden de bestanden. 670 00:48:49,360 --> 00:48:55,910 Dus als ik dat doe, kan printenv 1 argument of 0 argumenten nemen, 671 00:48:55,910 --> 00:48:58,070 niet meer dan 1. 672 00:49:01,800 --> 00:49:05,690 Er zijn andere commando's ook, maar we zijn niet van plan om in dat alles vandaag. 673 00:49:05,690 --> 00:49:11,010 Vergeet niet er waren de modifiers voor de shell variabelen als: h, 674 00:49:11,010 --> 00:49:14,350 die het laatste element van een padnaam zal dalen, 675 00:49:14,350 --> 00:49:17,950 of: r, die zal een uitbreiding dalen. 676 00:49:17,950 --> 00:49:23,110 Diegenen die nu gelden voor de omgevingsvariabelen ook. Ze hebben niet gewend zijn. 677 00:49:23,110 --> 00:49:24,960 Vroeger was het zo dat ze niet kon worden gewijzigd. Nu kunnen ze zijn. 678 00:49:24,960 --> 00:49:29,190 Het is een van de voorschotten met de ontwikkelingen van de schelpen door de jaren heen. 679 00:49:29,190 --> 00:49:35,620 Ik zei de dop als deel van de omgevingen 680 00:49:35,620 --> 00:49:43,040 en shell variabelen in de C-shell zijn, met enkele uitzonderingen, verschillende sets. 681 00:49:43,040 --> 00:49:46,790 U kunt een omgevingsvariabele en een shell variabele vast te stellen met dezelfde naam. 682 00:49:46,790 --> 00:49:49,220 Zij zullen verschillende variabelen, ze kunnen verschillende waarden hebben. 683 00:49:49,220 --> 00:49:53,090 De waarde van een wijzigt, wordt de waarde van de ander niet veranderen. 684 00:49:53,090 --> 00:49:58,070 Deze variabelen worden al geëvalueerd met het dollar teken - $ a, $ wat dan ook. 685 00:49:58,070 --> 00:50:02,340 Dus wat als je dit hebt? Weet je welke je krijgt? 686 00:50:02,340 --> 00:50:04,520 In mijn tests kreeg ik de shell variabele, 687 00:50:04,520 --> 00:50:07,240 maar dit is niet gedocumenteerd en je kunt niet op vertrouwen. 688 00:50:07,240 --> 00:50:10,270 Dus ik vraag u, is het creëren van shell en omgevingsvariabelen 689 00:50:10,270 --> 00:50:13,490 met dezelfde namen een goed idee? Nee. Oke. 690 00:50:13,490 --> 00:50:17,460 Wat zijn die grote uitzonderingen waarin het milieu en shellvariabelen 691 00:50:17,460 --> 00:50:19,860 zijn met elkaar verbonden? 692 00:50:19,860 --> 00:50:27,470 Er zijn deze 4. 693 00:50:32,030 --> 00:50:35,510 Hoofdletter TERM omgevingsvariabele, 694 00:50:35,510 --> 00:50:41,540 shell variabele term in kleine letters, type terminal emulatie. 695 00:50:41,540 --> 00:50:47,430 Ik ga gewoon hier op te gaan en ik ga echo, een nuttig commando hier doen, 696 00:50:47,430 --> 00:50:52,560 $ TERM $ termijn. En daar. 697 00:50:52,560 --> 00:51:00,570 xterm is een type terminal voor vensters weergegeven in het X Window System. 698 00:51:00,570 --> 00:51:04,330 xterm-kleur is een variant van dat verschillende kleuren mogelijk maakt. 699 00:51:04,330 --> 00:51:06,580 Waarom hebben we deze omschrijven? Wat is dit goed voor? 700 00:51:06,580 --> 00:51:09,740 Opdrachten die het scherm zoals de editor herschikken 701 00:51:09,740 --> 00:51:13,680 stuur bijzonder sequenties, zogenaamde escape sequences, 702 00:51:13,680 --> 00:51:18,160 een terminal of venster te herschikken enzovoort. 703 00:51:18,160 --> 00:51:20,990 Deze sequenties zijn verschillend voor verschillende terminals. 704 00:51:20,990 --> 00:51:23,100 Dit vertelt het welke te gebruiken. 705 00:51:23,100 --> 00:51:25,900 Soms zijn er problemen daar. 706 00:51:25,900 --> 00:51:28,600 Je zou willen dat veranderen. 707 00:51:28,600 --> 00:51:30,780 Als de dingen niet werken, soms het type terminal is verkeerd ingesteld, 708 00:51:30,780 --> 00:51:36,440 kunt u mogelijk op te lossen door het herdefiniëren van de term variabele. 709 00:51:36,440 --> 00:51:43,420 In deze gevallen veranderen van een variabele milieu variabele of shell variabele 710 00:51:43,420 --> 00:51:45,970 moet het andere veranderen. 711 00:51:45,970 --> 00:51:50,970 Ik heb ontdekt door ervaring dat het veranderen van TERM in hoofdletters 712 00:51:50,970 --> 00:51:54,060 niet altijd shell variabele termijn veranderen in kleine letters. 713 00:51:54,060 --> 00:51:55,550 Dit is een bug. 714 00:51:55,550 --> 00:51:59,400 Ik weet niet of dat is altijd waar. De meeste van de tijd is het niet waar is, maar het kan zijn. 715 00:51:59,400 --> 00:52:02,490 Dus als u een verandering te maken, maar eens dat uit. 716 00:52:02,490 --> 00:52:05,830 Het is niet vaak dat je nodig hebt om die waarde te veranderen, maar eens in de zoveel tijd je doet. 717 00:52:05,830 --> 00:52:08,260 Omgevingsvariabele USER. 718 00:52:08,260 --> 00:52:12,070 Nogmaals, omgevingsvariabele in hoofdletters, shell variabele in kleine letters. 719 00:52:12,070 --> 00:52:13,710 Dit is uw gebruikersnaam. 720 00:52:13,710 --> 00:52:16,730 Het is slechts onder zeer uitzonderlijke omstandigheden 721 00:52:16,730 --> 00:52:18,420 dat je zou willen dat veranderen. 722 00:52:18,420 --> 00:52:22,350 Als uw gebruikersnaam is iemand anders, kan het gooien van alles uit. 723 00:52:22,350 --> 00:52:26,040 Home directory, gebruikers home directory. 724 00:52:26,040 --> 00:52:28,060 Nogmaals, zou je niet willen om dat te veranderen. 725 00:52:28,060 --> 00:52:32,260 Het bericht in al deze gevallen en degene die we over te dekken, het pad variabele, 726 00:52:32,260 --> 00:52:37,070 omgevingsvariabele in hoofdletters en de gebonden shell variabele is in kleine letters. 727 00:52:37,070 --> 00:52:39,240 Als je er een wilt wijzigen, moet u de andere veranderen. 728 00:52:39,240 --> 00:52:45,960 Dit soort binding kan niet worden vastgesteld als je 2 variabelen niet kan binden, 729 00:52:45,960 --> 00:52:50,570 andere dan deze 4, en de binding in deze variabelen kan niet ongedaan gemaakt worden, 730 00:52:50,570 --> 00:52:52,090 je kunt ze niet scheiden. 731 00:52:52,090 --> 00:52:55,820 Dus deze 4 paar variabelen zijn gebonden. 732 00:52:55,820 --> 00:52:59,020 Ze altijd zal zijn. Geen anderen zullen. 733 00:52:59,020 --> 00:53:05,720 Bovendien zou het mogelijk zijn variabelen met dezelfde namen creëren 734 00:53:05,720 --> 00:53:07,780 van hun tegengestelde. 735 00:53:07,780 --> 00:53:11,600 Je zou een shell variabele term in kleine letters maken 736 00:53:11,600 --> 00:53:14,990 of een omgevingsvariabele TERM in hoofdletters. 737 00:53:14,990 --> 00:53:19,040 Die variabelen zou onafhankelijk van deze gepaarde variabelen 738 00:53:19,040 --> 00:53:20,780 en zij onafhankelijk van elkaar. 739 00:53:20,780 --> 00:53:23,780 Ik kan me niet voorstellen waarom je dat zou doen, tenzij je wilt om mensen te verwarren. 740 00:53:24,600 --> 00:53:29,730 Deze hier, weg variabele, dit is echt belangrijk. 741 00:53:29,730 --> 00:53:35,550 Een ander ding is dat er kan worden gevallen 742 00:53:35,550 --> 00:53:40,430 variabelen met gelijke gepaarde namen die niet gebonden zijn aan elkaar. 743 00:53:40,430 --> 00:53:45,000 Er kunnen variabelen, SHELL en shell, in hoofdletters en kleine letters. 744 00:53:45,000 --> 00:53:48,300 Op basis van die naam, weet je niet of dat de variabele is een shell variabele 745 00:53:48,300 --> 00:53:51,580 of een omgevingsvariabele, en ze zijn niet gebonden aan elkaar. 746 00:53:51,580 --> 00:53:55,300 Dus dat soort gekoppelde namen impliceert niet gebonden variabelen. 747 00:53:55,300 --> 00:53:58,830 Het pad variabele, die ik al eerder liet zien, 748 00:53:58,830 --> 00:54:01,880 is een lijst van padnamen waarin de shell zoekt naar opdrachten. 749 00:54:01,880 --> 00:54:12,320 Laten we hier naar dit venster en we echo $ PATH, hoofdletters doen - 750 00:54:12,320 --> 00:54:20,230 omgevingsvariabele - echo $ pad, kleine letters - shell variabele. 751 00:54:20,230 --> 00:54:24,980 Merk op dat de lijst van directories is hetzelfde. Deze zijn gebonden. 752 00:54:24,980 --> 00:54:26,590 Verander een, je de ander veranderen. 753 00:54:26,590 --> 00:54:32,970 In de omgeving variabele elementen worden gescheiden door dubbele punten. Merk op dat. 754 00:54:32,970 --> 00:54:35,130 De shell variabelen worden gescheiden door spaties. 755 00:54:35,130 --> 00:54:38,760 Deze omgeving variabele is een string. 756 00:54:38,760 --> 00:54:41,480 De shell variabele is een array. 757 00:54:41,480 --> 00:54:43,490 De Bourne shell niet arrays. 758 00:54:43,490 --> 00:54:46,600 Bash doet, maar dit is al een vast onderdeel van de schelp. 759 00:54:46,600 --> 00:54:48,660 Dit is een snaar en geen array. 760 00:54:48,660 --> 00:54:50,420 De C-shell had altijd arrays. 761 00:54:50,420 --> 00:54:52,630 De arrays zijn veel gemakkelijker om mee te werken. 762 00:54:52,630 --> 00:54:54,400 U kunt verwijzen naar delen ervan. 763 00:54:54,400 --> 00:55:02,350 Dus echo $ pad [1] en ik krijg / usr / bin, het eerste element. 764 00:55:02,350 --> 00:55:09,950 Nogmaals, herinner dollar teken staat voor het laatste element van de geschiedenis lijst. 765 00:55:09,950 --> 00:55:16,850 Wat gebeurt er? Het probeerde dollarteken vinden als variabele symbool. 766 00:55:16,850 --> 00:55:20,850 Ik ontsnappen. Oeps. Het zou niet te nemen dat ofwel. 767 00:55:20,850 --> 00:55:23,690 Sommige van deze dingen niet zo goed werken. 768 00:55:23,690 --> 00:55:28,140 Misschien zullen we gewoon weg dat uit. 769 00:55:28,140 --> 00:55:36,980 Sterretje verwijst naar de hele zaak, maar dat is wat je krijgt als je niet een element opgeeft. 770 00:55:36,980 --> 00:55:46,170 Een andere manier die array variabelen kunnen worden gemanipuleerd, 771 00:55:46,170 --> 00:55:49,500 aantal elementen daar 7 elementen. 772 00:55:49,500 --> 00:55:53,410 Hier hebben we het hekje voor de variabele naam. 773 00:55:53,410 --> 00:55:58,280 Hier nog een. Zet een vraagteken daar. 774 00:55:58,280 --> 00:56:03,170 Dat is een logische waarde. Dat betekent dat de variabele bestaat. 775 00:56:03,170 --> 00:56:05,160 Het is een andere manier van werken met variabelen. 776 00:56:05,160 --> 00:56:06,660 Dat, door de manier, hoeft niet aan een array variabele. 777 00:56:06,660 --> 00:56:08,210 Dat kan een variabele zijn. 778 00:56:08,210 --> 00:56:11,840 En als ik dat doe, is er geen dergelijke variabele en ik krijg een 0. 779 00:56:11,840 --> 00:56:14,990 Een ander klein ding er over variabele evaluaties. 780 00:56:23,670 --> 00:56:32,950 Terug naar deze ene hier, als om wat voor reden je wilde werken met deze 781 00:56:32,950 --> 00:56:37,990 in plaats van het werken met de matrix, de shell variabele, 782 00:56:37,990 --> 00:56:41,470 er opdrachten die deze dingen kunnen scheiden op basis van de dikke darm. 783 00:56:41,470 --> 00:56:44,080 In feite, als je gaat mogelijk om dit te doen in de Bash shell, 784 00:56:44,080 --> 00:56:47,110 een soort van een script, dat zou waarschijnlijk hoe je het zou doen. 785 00:56:47,110 --> 00:56:50,350 Maar in de C-shell is het veel makkelijker om de array te gebruiken. 786 00:56:50,350 --> 00:56:58,250 In de Bourne shell, worden variabelen toegewezen door een enkele uitdrukking als deze, 787 00:56:58,250 --> 00:57:01,760 zoals de manier waarop je zou een variabele toe te wijzen in een programmeertaal, 788 00:57:01,760 --> 00:57:05,110 en hier is er mag geen spatie zijn. 789 00:57:05,110 --> 00:57:09,110 Het is noodzakelijk dat het gewoon 1 string. 790 00:57:09,110 --> 00:57:14,980 In de Bourne-soort schelpen, alle variabelen shellvariabelen. 791 00:57:14,980 --> 00:57:19,250 Omgevingsvariabelen zijn een subset van de shell-variabelen. 792 00:57:19,250 --> 00:57:24,060 Ze worden onderscheiden van de niet-omgevingsvariabelen door te exporteren. 793 00:57:24,060 --> 00:57:28,860 Het commando om dat te doen is de export, zoals export PRINTER. 794 00:57:28,860 --> 00:57:34,930 Als we dergelijke variabele definiëren 795 00:57:34,930 --> 00:57:38,480 als we wilden een drukkerij opdracht om het te vinden, zou het door een variabele te zijn, 796 00:57:38,480 --> 00:57:40,730 en dat is hoe we het een. 797 00:57:40,730 --> 00:57:42,090 Hier is er iets soort verwarrend. 798 00:57:42,090 --> 00:57:50,430 Deze uitdrukking, te exporteren naar het milieu, is afgeleid van deze Bourne shell concept 799 00:57:50,430 --> 00:57:54,520 en toch deze uitdrukking wordt gebruikt in beschrijvingen van de C-schaal, 800 00:57:54,520 --> 00:57:57,920 waar er geen commando als export. 801 00:57:57,920 --> 00:58:06,200 Als je gewoon export zeggen zelf, krijg je een lijst van de uitgevoerde - 802 00:58:06,200 --> 00:58:10,620 Dus als ik gewoon exporteren hier, niet zoiets. 803 00:58:13,620 --> 00:58:15,200 Oke, daar gaan we. 804 00:58:15,200 --> 00:58:17,010 Deze dingen, door de manier, worden ook gedefinieerd door de shell. 805 00:58:17,010 --> 00:58:19,400 Ik heb geen van deze definiëren door mijzelf. 806 00:58:19,400 --> 00:58:23,550 De schelp doet allerlei dingen op zichzelf. 807 00:58:23,550 --> 00:58:26,650 Het moet dingen automatisch doen. 808 00:58:30,240 --> 00:58:36,880 In Bash of Korn shell, kunt u een opdracht uitvoeren als dit, 809 00:58:36,880 --> 00:58:42,000 die beide geven een variabele een waarde en exporteren in 1 commando. 810 00:58:42,000 --> 00:58:46,150 In de Bourne shell moeten ze aparte commando's als uitvoer een zijn. 811 00:58:46,150 --> 00:58:48,410 Hier is een ander aspect dat is verwarrend. 812 00:58:48,410 --> 00:58:52,220 De set commando in de C-shell bepaalt de variabelen 813 00:58:52,220 --> 00:58:55,550 en zonder argumenten vertelt u wat de waarden van de variabelen 'zijn. 814 00:58:55,550 --> 00:59:01,140 In de Bash shell, het set commando zonder argumenten doet hetzelfde, 815 00:59:01,140 --> 00:59:03,580 maar met argumenten die zij doet iets heel anders. 816 00:59:03,580 --> 00:59:06,200 Dus dit zijn de verschillende argumenten hier. 817 00:59:06,200 --> 00:59:10,460 Sommige van deze zijn omgevingsvariabelen, sommigen van hen zijn shellvariabelen. 818 00:59:10,460 --> 00:59:13,200 Ze zijn allemaal shellvariabelen echt. Sommige van deze zijn omgevingsvariabelen. 819 00:59:15,690 --> 00:59:23,920 De set commando met argumenten kunnen worden gebruikt om te werken 820 00:59:23,920 --> 00:59:28,220 de positionele parameters om een ​​script 821 00:59:28,220 --> 00:59:33,910 wat een manier om ze allemaal tegelijk. 822 00:59:33,910 --> 00:59:36,150 We kunnen niet echt ingaan vandaag. 823 00:59:36,150 --> 00:59:39,580 Het kan ook worden gebruikt om shell gedrag. 824 00:59:39,580 --> 00:59:46,700 Vooral in Bash zijn er variabelen die zal bepalen hoe de shell zich gedraagt. 825 00:59:46,700 --> 00:59:51,310 Dan ook slechts deze ene opdracht die je zou kunnen zien, deze opdracht. 826 00:59:51,310 --> 00:59:59,050 Gezet gevolgd door variabelen en variabele types wordt gebruikt in de Korn en Bash schelpen. 827 00:59:59,050 --> 01:00:04,970 Het is niet verplicht, maar het kan worden gebruikt om de waarden van variabelen beperken 828 01:00:04,970 --> 01:00:08,400 die nuttig om fouten te voorkomen kan zijn, en het is vrij gebruikelijk. 829 01:00:08,400 --> 01:00:11,640 Dus ik ben gewoon te vermelden dat in het geval je het ziet ergens. 830 01:00:17,290 --> 01:00:19,160 Het waarbij opdracht. 831 01:00:19,160 --> 01:00:22,490 Herinner ik al eerder zei het waar commando in de C-shell, 832 01:00:22,490 --> 01:00:28,750 die u kunt vertellen de locatie van een commando padnaam. 833 01:00:28,750 --> 01:00:32,580 Hier is opdracht substitutie. 834 01:00:32,580 --> 01:00:41,900 U moet vinden op je toetsenbord ergens een teken dat er zo uitziet. 835 01:00:41,900 --> 01:00:44,910 De locatie op het toetsenbord gaat variëren. 836 01:00:44,910 --> 01:00:47,050 We hebben het genoemd aanhalingsteken. Het is ongeveer de grootte van een offerte. 837 01:00:47,050 --> 01:00:48,720 Het gaat van linksboven naar rechtsonder. 838 01:00:48,720 --> 01:00:52,690 Hier op mijn Mac-toetsenbord is het in de linker bovenhoek. 839 01:00:52,690 --> 01:00:58,150 Dat teken kan worden gebruikt om een ​​opdracht binnen een opdracht uit te voeren. 840 01:00:58,150 --> 01:01:03,400 Als u een expressie binnen aanhalingstekens, 841 01:01:03,400 --> 01:01:07,080 die uitdrukking is een bevel, het wordt gerund. 842 01:01:07,080 --> 01:01:09,010 De uitvoer van deze opdracht 843 01:01:09,010 --> 01:01:11,980 Vervolgens wordt vervangen door de gehele uitdrukking backquote 844 01:01:11,980 --> 01:01:16,110 in een langere opdracht die loopt dan met die uitgang 845 01:01:16,110 --> 01:01:22,010 als onderdeel van de reeks argumenten enzovoort. 846 01:01:22,010 --> 01:01:28,640 Hier is een opdracht waarin dat gebruik maakt. 847 01:01:28,640 --> 01:01:32,340 Laten we tonen hier de operatie. 848 01:01:44,980 --> 01:01:49,090 Laten we hier gaan, neem de aanhalingstekens. 849 01:01:49,090 --> 01:01:54,410 Een controle krijgt me aan het begin van de lijn met de Emacs syntax. 850 01:01:54,410 --> 01:02:00,380 Tot dusver is de padnamen is wat waar doet, 851 01:02:00,380 --> 01:02:05,040 maar als ik het zo doen, vervolgens stekkers in die lijst van padnamen 852 01:02:05,040 --> 01:02:08,750 in plaats van deze hele aanhalingsteken expressie en loopt ls-l op hen. 853 01:02:08,750 --> 01:02:11,120 Soort handig, hè? 854 01:02:11,120 --> 01:02:14,860 Dus dat is een keurige ding. Dat is hoe aanhalingstekens werken. 855 01:02:14,860 --> 01:02:17,560 Nu gaan we nog iets verder omlaag. 856 01:02:17,560 --> 01:02:22,050 Dit zijn aliassen. Ik heb eigenlijk gebruik maken van deze. 857 01:02:22,050 --> 01:02:26,410 Ik zal proberen om dit in te krijgen met 1 bewerking. 858 01:02:34,900 --> 01:02:36,900 Oke. 859 01:02:36,900 --> 01:02:39,630 Laten we nu eens kijken hoe die definities kwam. 860 01:02:39,630 --> 01:02:44,930 alias LBH me te vertellen hoe het is gedefinieerd. 861 01:02:44,930 --> 01:02:51,210 Let op het is alleen dit, maar de buitenste citaten zijn genomen uit 862 01:02:51,210 --> 01:02:53,750 en het uitroepteken wordt gehaald. 863 01:02:53,750 --> 01:02:58,940 *, Compleet overzicht van alle argumenten. 864 01:02:58,940 --> 01:03:03,580 In een alias definitie zal het terug van toepassing op waar ik dit gebruiken. 865 01:03:03,580 --> 01:03:10,620 LWH ksh bash. Oke. 866 01:03:10,620 --> 01:03:13,960 Zie je hoe dat werkt? Het bespaart me wat te typen. 867 01:03:13,960 --> 01:03:16,440 Laten we een beetje gewoon om iets anders te noemen. 868 01:03:19,150 --> 01:03:23,120 Let hier op deze verschillende schelpen. Ik had dit al eerder heb genoemd. 869 01:03:23,120 --> 01:03:36,060 De csh heeft een 2 hier en dat doet / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 We kunnen vaststellen op een andere manier, dat die eigenlijk hetzelfde bestand. 871 01:03:39,870 --> 01:03:43,150 Vergeet ik al zei als je typt je sh bash krijgen. 872 01:03:43,150 --> 01:03:47,390 Vul dit en je dit hoort. 873 01:03:47,390 --> 01:03:51,730 Maar die zijn niet gekoppeld. Die hebben enkele sprekers er. 874 01:03:51,730 --> 01:03:54,910 En dit is niet het soort bestand dat een ander kan noemen. 875 01:03:54,910 --> 01:03:59,460 Dus dat zijn aparte bestanden, de C-shell daarvan zijn hetzelfde bestand. 876 01:03:59,460 --> 01:04:03,640 Hier terug naar beneden, de andere hier, dit alias, 877 01:04:03,640 --> 01:04:09,090 rekening mee dat draait deze opdracht, bestand. 878 01:04:09,090 --> 01:04:13,810 Dat alias loopt dat. Bestand vertelt u het type van een bestand. 879 01:04:13,810 --> 01:04:20,330 Dus FWH ksh dreun. Oke. 880 01:04:20,330 --> 01:04:23,230 Dat is de output van de bestandsopdracht. 881 01:04:23,230 --> 01:04:24,630 Ik weet niet of je weet wat dit betekent hier, 882 01:04:24,630 --> 01:04:26,750 Mach-O universal binary met 2 architecturen. 883 01:04:26,750 --> 01:04:30,470 Er zijn 2 mogelijke types processor in de Mac, 884 01:04:30,470 --> 01:04:34,780 en sommige programma geschreven om te kunnen draaien met zowel 885 01:04:34,780 --> 01:04:37,950 en het bestand commando kan bepalen dat, dus dat is wat dit betekent. 886 01:04:37,950 --> 01:04:40,660 Beide bestanden zijn geschreven op die manier. 887 01:04:40,660 --> 01:04:43,760 Zo zien we hoe de alias werkt, zien we hoe de aanhalingsteken werkt, 888 01:04:43,760 --> 01:04:48,640 zien we hoe de eigenlijke bestand ls of het bestand werkt. 889 01:04:52,050 --> 01:04:57,000 Dit zou niet werken. Probeer "waar waar" en "LWH waar". Oke, laten we proberen dat. 890 01:04:57,000 --> 01:05:01,040 waar waar. 891 01:05:01,040 --> 01:05:03,500 waar is een shell ingebouwd. 892 01:05:03,500 --> 01:05:06,970 Vergeet niet eerder toonden we aan dat Bash hoefde niet waar. 893 01:05:06,970 --> 01:05:10,080 Als u typt waar in de Bash shell, krijg je een foutmelding. 894 01:05:10,080 --> 01:05:12,540 Het is gewoon een deel van de schelp in plaats van een aparte opdracht. 895 01:05:12,540 --> 01:05:20,000 Wat gebeurt er als ik het type LBH op zoek naar waar? Kijk wat er gebeurt. 896 01:05:20,000 --> 01:05:22,850 Ran waar waar, kreeg deze uitgang, en vervolgens probeerde ls lopen 897 01:05:22,850 --> 01:05:25,600 zoals ik op waar is een shell ingebouwd. 898 01:05:25,600 --> 01:05:28,790 waar is er, maar de anderen niet bestaan. 899 01:05:28,790 --> 01:05:32,090 Geen van deze bestaan, eigenlijk. 900 01:05:32,090 --> 01:05:35,560 Dus dat werkt niet altijd, en het illustreert ook hoe sommige dingen 901 01:05:35,560 --> 01:05:39,580 niet doen helemaal wat je zou hebben gedacht. 902 01:05:40,930 --> 01:05:43,010 Laten we naar beneden gaan een beetje verder hier. 903 01:05:44,890 --> 01:05:54,760 Dit hier is in Bash. Dat is ook opdracht substitutie, zoals het aanhalingsteken. 904 01:05:54,760 --> 01:06:05,280 Maar in tegenstelling aanhalingsteken, gebruikt deze variabele stijl. 905 01:06:05,280 --> 01:06:09,860 Er zijn een aantal uitdrukkingen die beginnen met een dollarteken, 906 01:06:09,860 --> 01:06:16,070 en terwijl deze zijn niet variabelen, zij leenden het gebruik van het dollarteken 907 01:06:16,070 --> 01:06:19,570 om een ​​uitdrukking van een soort aan te geven. 908 01:06:19,570 --> 01:06:23,550 Dat kan worden omgeven door haakjes of haken of dubbele haakjes, 909 01:06:23,550 --> 01:06:26,320 die heeft een ander doel. 910 01:06:26,320 --> 01:06:29,500 Single haakjes zijn hier een opdracht substitutie net als de aanhalingstekens. 911 01:06:29,500 --> 01:06:32,720 Dubbele haakjes is eigenlijk een rekenkundige bewerking. 912 01:06:32,720 --> 01:06:35,380 Er zijn andere syntaxis, andere operaties. 913 01:06:35,380 --> 01:06:41,520 Aanhalingsteken syntax is verkrijgbaar in Bash. 914 01:06:41,520 --> 01:06:46,780 Echter, deze voorkeur. Het is veel gemakkelijker om te lezen en het laat nestelen. 915 01:06:46,780 --> 01:06:51,300 U kunt binnen $ (commando) hebben een andere opdracht, 916 01:06:51,300 --> 01:06:54,590 iets als - 917 01:07:14,560 --> 01:07:18,210 Ik krijg een lijst daar. 918 01:07:18,210 --> 01:07:21,670 Dat zou werken als ik de aanhalingsteken ook. 919 01:07:32,050 --> 01:07:38,470 Wat als ik zoiets willen doen - 920 01:08:03,390 --> 01:08:06,430 Je zou waarschijnlijk niet daadwerkelijk gebruik maken van deze opdracht, 921 01:08:06,430 --> 01:08:14,160 maar deze interne opdracht substitutie echo's de namen van alle bestanden die beginnen met een, 922 01:08:14,160 --> 01:08:18,229 dan is dit een loopt ls-l op die bestanden, 923 01:08:18,229 --> 01:08:20,500 en dan is dit een enkel echo's van de output. 924 01:08:21,729 --> 01:08:24,479 Je zou waarschijnlijk niet dit te doen, je gewoon zou doen de echo of ls, 925 01:08:24,479 --> 01:08:29,450 maar dit illustreert hoe de nesten van commando's werkt. 926 01:08:29,450 --> 01:08:34,380 Dus gewoon een andere functie hier. 927 01:08:34,380 --> 01:08:37,450  Ik noemde dit eerder, dat wanneer je waar in de C-shell, 928 01:08:37,450 --> 01:08:42,770 Typ werken in de Bourne-soort schelpen voor het lokaliseren van commando's. 929 01:08:48,939 --> 01:08:52,270 Ingebouwde commando, net wat ik daar zei. 930 01:08:52,270 --> 01:08:54,640 Commando's maken deel uit van de schaal, zoals waar. 931 01:08:54,640 --> 01:08:59,880 Wanneer de shell voert het commando uit als ls, lokaliseert het door het pad, 932 01:08:59,880 --> 01:09:03,029 vindt het in een directory ergens, 933 01:09:03,029 --> 01:09:05,800 leest dat in het geheugen, maakt een nieuwe shell, 934 01:09:05,800 --> 01:09:08,960 leest het commando ls of wat dan ook in de schelp 935 01:09:08,960 --> 01:09:11,450 waar de omgevingsvariabelen al zijn gevestigd, 936 01:09:11,450 --> 01:09:14,000 en maakt zij uitvoering aan. 937 01:09:14,000 --> 01:09:18,319 Ingebouwde opdracht, de code voor die opdracht is in de schaal, 938 01:09:18,319 --> 01:09:21,460 dus de shell begint net uitvoeren deel van zijn eigen code. 939 01:09:21,460 --> 01:09:24,569 waar is zo'n commando. Het wordt eigenlijk sneller. 940 01:09:24,569 --> 01:09:28,380 Het hoeft niet om iets in het geheugen te lezen, het is al in het geheugen. 941 01:09:28,380 --> 01:09:32,460 Ingebouwde commando's hebben altijd voorrang op commando's met dezelfde naam. 942 01:09:32,460 --> 01:09:36,050 Commando's die in mappen in het pad kunnen dezelfde naam hebben, 943 01:09:36,050 --> 01:09:39,090 commando's in verschillende mappen, bestanden in verschillende mappen. 944 01:09:39,090 --> 01:09:41,740 Degene die eerder in het pad gebeurt is degene die je krijgt. 945 01:09:41,740 --> 01:09:43,770 Als er een ingebouwde opdracht, altijd krijg je het. 946 01:09:43,770 --> 01:09:47,890 Er is geen manier om het een lagere prioriteit dan een commando in het pad. 947 01:09:47,890 --> 01:09:54,140 Als u wilt dat de commando pad te krijgen, kunt u het volledige pad typen. 948 01:09:54,140 --> 01:09:55,850 Als er een commando en het pad ergens 949 01:09:55,850 --> 01:09:58,440 je kon / bin / waar te typen en je zou krijgen. 950 01:09:58,440 --> 01:10:01,800 Als u niet wilt dat de hele padnaam typt, kan u een alias definiëren. 951 01:10:01,800 --> 01:10:06,310 In feite, als je gaf de alias met dezelfde naam als de ingebouwde opdracht, zou het werken 952 01:10:06,310 --> 01:10:08,790 omdat de alias definitie wordt geëvalueerd 953 01:10:08,790 --> 01:10:13,220 voordat het reservoir bepaalt dat het een ingebouwde opdracht die moet worden uitgevoerd. 954 01:10:18,810 --> 01:10:23,440 Dan krijgt dit iets ingewikkelder met enkele commando's hier. 955 01:10:23,440 --> 01:10:29,880 Bij sommige opdrachten zijn eigenlijk ingebouwd commando en in het pad. 956 01:10:29,880 --> 01:10:34,140 Een van hen is echo, de opdracht gebruikte ik gewoon een tijdje geleden in die voorbeelden. 957 01:10:34,140 --> 01:10:37,410 Echo is een opdracht in het pad en het is in elke schelp. 958 01:10:37,410 --> 01:10:40,580 Ze hoeven niet per se allemaal op dezelfde manier gedragen. 959 01:10:40,580 --> 01:10:42,970 Het was oorspronkelijk een opdracht alleen in het pad. 960 01:10:42,970 --> 01:10:45,280 Het werd later ingebouwd in de schelpen. 961 01:10:45,280 --> 01:10:48,080 Omdat er opties die afhankelijk milieu 962 01:10:48,080 --> 01:10:52,970 en de command line opties, de ingebouwde commando's 963 01:10:52,970 --> 01:10:57,030 geschreven hetzelfde als het commando dat de weg was functioneren, 964 01:10:57,030 --> 01:10:59,670 het is onwaarschijnlijk dat ze zouden zijn geschreven op die manier 965 01:10:59,670 --> 01:11:01,720 indien de opdracht nog niet was geschreven voor het pad. 966 01:11:01,720 --> 01:11:06,180 Dus dit heeft bijwerkingen. De geschiedenis heeft effecten hier. 967 01:11:06,180 --> 01:11:08,380 Er zijn opties er zijn. 968 01:11:14,280 --> 01:11:23,060 Er is ook een optie die door een variabele in de tcsh genaamd echo_style. 969 01:11:23,060 --> 01:11:27,700 Dat is een van deze variabelen die de manier die werkt echo kan veranderen. 970 01:11:27,700 --> 01:11:30,910 Er zijn andere gevallen waarin u een variabele kunt toewijzen 971 01:11:30,910 --> 01:11:36,290 dat verandert de manier waarop de shell operatie, met inbegrip van een ingebouwde opdracht, werkt. 972 01:11:36,290 --> 01:11:38,130 Het zou niet van invloed op iets anders 973 01:11:38,130 --> 01:11:40,640 aangezien andere commando's hebben geen toegang tot de shell variabelen, 974 01:11:40,640 --> 01:11:42,090 alleen de omgevingsvariabelen. 975 01:11:42,090 --> 01:11:45,360 Maar shell operaties kunnen de shellvariabelen lezen. 976 01:11:45,360 --> 01:11:50,710 Dat zal niet werken voor csh. Dat is alleen tcsh. Dat is een van de verbeteringen. 977 01:11:58,540 --> 01:12:04,620 Parsing heeft sequenties het oog op evaluatie metacharacters, 978 01:12:04,620 --> 01:12:08,140 het oog op evaluatie variabelen, aliassen, geschiedenis referenties. 979 01:12:08,140 --> 01:12:11,830 Er is een bepaalde volgorde voor deze dingen. 980 01:12:11,830 --> 01:12:13,730 Als dat zo is dingen in een bepaalde volgorde 981 01:12:13,730 --> 01:12:16,080 en krijgt om iets dat is een uitdrukking van een soort 982 01:12:16,080 --> 01:12:20,650 reeds geëvalueerd zal niet opnieuw evalueren. 983 01:12:20,650 --> 01:12:24,520 Als het wordt, dan zal het alleen maar te vellen over de personages. 984 01:12:24,520 --> 01:12:29,920 Dus als de evaluatie van een aantal uitdrukkingen als opdracht substitutie 985 01:12:29,920 --> 01:12:36,850 of variabele of wat leidt tot een expressie 986 01:12:36,850 --> 01:12:39,240 die je zou willen worden geëvalueerd, 987 01:12:39,240 --> 01:12:42,510 dat werkt alleen als die evaluatie later in de reeks plaatsvindt. 988 01:12:42,510 --> 01:12:45,010 Ik hoop dat ik daar te zijn duidelijk. 989 01:12:45,010 --> 01:12:50,460 Dat parsing sequence, een operatie in de C-shell, 990 01:12:50,460 --> 01:12:56,490 is niet voor ingebouwde opdrachten als voor niet-ingebouwde opdrachten. 991 01:12:56,490 --> 01:12:58,890 Ik ben niet zeker over Bash daar. 992 01:12:58,890 --> 01:13:02,450 Als bijvoorbeeld een shell variabele produceerde een geschiedenis referentie, 993 01:13:02,450 --> 01:13:04,230 het zou waarschijnlijk niet terug in de geschiedenis te gaan. 994 01:13:04,230 --> 01:13:06,010 Het zou gewoon het uitroepteken. 995 01:13:06,010 --> 01:13:08,840 In feite kunnen we gewoon proberen dat nu uit. 996 01:13:09,720 --> 01:13:18,240 a = en we moeten dit in daar te zetten. 997 01:13:30,690 --> 01:13:34,580 Oh, wacht. Sorry. Ik deed dit in de Bash. Ik wilde het hier doen. 998 01:13:53,470 --> 01:13:56,080 Zien, zodat het niet dat de geschiedenis verwijzing evalueren 999 01:13:56,080 --> 01:14:00,520 omdat het reeds voorbij het evalueren geschiedenis expressies 1000 01:14:00,520 --> 01:14:02,720 wanneer evalueerde de variabele. 1001 01:14:02,720 --> 01:14:05,550 Dus dat is 1 effect van parsing. 1002 01:14:05,550 --> 01:14:08,760 En nogmaals, ingebouwde commando's worden niet op dezelfde manier gedaan. 1003 01:14:08,760 --> 01:14:11,230 Oke. Laten we gaan naar de volgende hier. 1004 01:14:11,230 --> 01:14:16,060 Dit is bedoeld om 1 lijn te zijn, maar het maakt het makkelijker om te lezen. 1005 01:14:19,130 --> 01:14:21,530 Wat doet dat? 1006 01:14:21,530 --> 01:14:28,640 U herinnert zich misschien dat we sterretjes kunnen evalueren als bestandsnaam wildcards, 1007 01:14:28,640 --> 01:14:33,890 en er zijn andere bestandsnaam wildcards zoals het vraagteken en beugel uitdrukkingen. 1008 01:14:33,890 --> 01:14:39,000 Dat soort evaluatie wordt genoemd globbing. 1009 01:14:39,000 --> 01:14:46,290 ingesteld noglob aan het begin van deze opdracht zegt doe dat niet. 1010 01:14:46,290 --> 01:14:53,370 unset noglob zegt ga terug naar dat te doen. 1011 01:14:53,370 --> 01:14:56,440 Merk op dat set glob zou dat effect hebben. 1012 01:14:56,440 --> 01:15:00,800 In gewone taal, zou opzetten glob of uitgeschakeld noglob lijken gelijk te zijn, 1013 01:15:00,800 --> 01:15:03,290 maar hier is het niet. Het is uitgeschakeld noglob. 1014 01:15:05,120 --> 01:15:07,910 Nu Tset. tset stond voor terminal set. 1015 01:15:07,910 --> 01:15:11,840 Het is niet dat nu vaak gebruikt, maar voordat venstersystemen beschikbaar kwam 1016 01:15:11,840 --> 01:15:15,760 en je een enkel terminal had, moet u mogelijk het type te bepalen. 1017 01:15:15,760 --> 01:15:18,700 En als er iets zou komen over een Ethernet-of uit het netwerk, 1018 01:15:18,700 --> 01:15:21,120 je zou willen zeggen dat het een vt100. 1019 01:15:21,120 --> 01:15:26,630 VT100 is een soort van een standaard in de terminal business. Het komt uit het december terminal. 1020 01:15:26,630 --> 01:15:35,270 Als je gewoon een inbelverbinding te doen - merken dat? Dit gaat terug een manieren, huh? 1021 01:15:35,270 --> 01:15:39,520 Dus als we gewoon TSET hier, 1022 01:15:39,520 --> 01:15:45,250 als ik gewoon tset doen, is het resetten van mijn terminal, maar je zag niets. 1023 01:15:45,250 --> 01:15:47,340 Het heeft niet echt iets te veranderen. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Oke. 1026 01:15:51,480 --> 01:15:53,350 setenv TERM xterm-kleur. 1027 01:15:53,350 --> 01:15:57,080 We weten al dat de term werd ingesteld op die manier, zodat niet veranderen. 1028 01:15:57,080 --> 01:15:58,860 Dat is de manier waarop we zouden willen doen. 1029 01:15:58,860 --> 01:16:07,080 Maar merk op dat dit commando, tset-s, net uitgang deze opdrachten. Het maakte hen niet uit te voeren. 1030 01:16:07,080 --> 01:16:09,770 Het duurde niet deze opdrachten uitvoeren, maar de uitgang hen. 1031 01:16:09,770 --> 01:16:13,650 Dus dit is bedoeld om commando's die dan zal worden uitgevoerd produceren. 1032 01:16:13,650 --> 01:16:16,360 Je herinnert je het commando in dat bestand Ik liet je een Q in het had. 1033 01:16:16,360 --> 01:16:18,910 Dus laten we dat doen. 1034 01:16:18,910 --> 01:16:23,750 De Q onderdrukt enkele output, maar dat maakt hier niet uit, zoals je kunt zien. 1035 01:16:23,750 --> 01:16:27,980 Ik ben gewoon om dat te doen om te laten zien dat het niet uitmaakte. 1036 01:16:27,980 --> 01:16:31,870 Dit is aanhalingsteken syntax. 1037 01:16:31,870 --> 01:16:35,340 Let op de aanhalingsteken hier, aanhalingsteken hier. 1038 01:16:35,340 --> 01:16:37,680 Ik ben hier weg te laten die dingen. 1039 01:16:37,680 --> 01:16:39,570 Dit zijn gevallen van het vertellen wat te doen 1040 01:16:39,570 --> 01:16:42,050 in het geval van bepaalde soorten terminals - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, netwerk, inbelverbinding, wat je hebt. 1042 01:16:45,400 --> 01:16:48,050 Het maakt niet uit hier omdat we eigenlijk niet een van deze dingen te doen. 1043 01:16:48,050 --> 01:16:49,720 Ik ben gewoon ter illustratie van de opdracht. 1044 01:16:49,720 --> 01:16:55,170 Als ik dit doe met het aanhalingsteken, wat ga ik krijgen? 1045 01:16:55,170 --> 01:17:00,210 Merk ook hier dat dit inbegrepen de set noglob en de uitgeschakelde noglob, 1046 01:17:00,210 --> 01:17:02,630 dus die nu overbodig is geworden in de definitie. 1047 01:17:02,630 --> 01:17:05,380 Dat was niet altijd het geval, maar nu zijn ze opgenomen in deze opdracht. 1048 01:17:05,380 --> 01:17:08,890 Maar laten we eens kijken wat er gebeurt als ik dat doe 1049 01:17:08,890 --> 01:17:12,570 en ga naar het begin van de regel met Control A en ik dat doen. 1050 01:17:14,380 --> 01:17:18,040 Oke, stel: Opdracht niet gevonden. Dat is een beetje vreemd, is het niet? 1051 01:17:18,040 --> 01:17:20,570 set is een bekende commando. Het is een deel van de schelp. 1052 01:17:20,570 --> 01:17:24,040 set: Commando niet gevonden? Waarom is dat? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Nou, laten we over nadenken. 1054 01:17:26,790 --> 01:17:31,100 Het runnen van een aanhalingsteken opdracht substitutie, 1055 01:17:31,100 --> 01:17:37,430 en dat optreedt bij een bepaald deel van de sequentie van het ontleden van de opdracht. 1056 01:17:37,430 --> 01:17:40,360 set is een ingebouwde opdracht. 1057 01:17:40,360 --> 01:17:43,900 Dus tegen de tijd dat het doet dat opdracht substitutie, 1058 01:17:43,900 --> 01:17:48,280 het is al voorbij het punt van de identificatie van ingebouwde opdrachten gekregen. 1059 01:17:48,280 --> 01:17:51,900 Zo behandelt ingesteld alsof het een opdracht in het pad. 1060 01:17:51,900 --> 01:17:55,440 Onnodig te zeggen, is het niet vinden en je een foutmelding krijgt. 1061 01:17:55,440 --> 01:17:59,300 Well. Er is een voorbeeld van parsing volgorde. 1062 01:17:59,300 --> 01:18:01,460 En wat doen we dat? 1063 01:18:01,460 --> 01:18:04,800 Let hier op deze zeer interessante opdracht, eval. 1064 01:18:04,800 --> 01:18:06,530 Ik vraag me af wat dat doet. 1065 01:18:06,530 --> 01:18:08,760 Als je kijkt naar de handleiding - en laten we dat doen 1066 01:18:08,760 --> 01:18:12,000 om te laten zien hoe verwarrend deze handleidingen zijn - 1067 01:18:12,000 --> 01:18:19,400 man tcsh, verward handleiding, het vinden van dingen hier is niet gemakkelijk. 1068 01:18:19,400 --> 01:18:31,850 Hier gaan we, eval arg, dus kunnen we 1 of meer argumenten 1069 01:18:31,850 --> 01:18:34,090 en er is een lijst van dingen daar. 1070 01:18:34,090 --> 01:18:37,730 Behandelt de argumenten als input voor de shell 1071 01:18:37,730 --> 01:18:43,600 en voert de resulterende opdrachten in het kader van de huidige shell. 1072 01:18:43,600 --> 01:18:46,900 Dit wordt meestal gebruikt om commando gegenereerd als gevolg van commando 1073 01:18:46,900 --> 01:18:51,310 of variabele substitutie omdat parsing plaatsvindt vóór deze substituties. 1074 01:18:51,310 --> 01:18:52,580 Zeer goed. 1075 01:18:52,580 --> 01:18:54,740 En hier zijn ze zelfs verwijzen naar de tset opdracht voor een steekproef gebruik 1076 01:18:54,740 --> 01:18:57,700 zoals degene die ik net liet zien. 1077 01:18:57,700 --> 01:19:00,440 Nu moet ik het venster terug naar een nuttige plaats te krijgen. 1078 01:19:03,150 --> 01:19:07,800 Laten we hier en we zullen zien dat eval wordt gebruikt net daarvoor. 1079 01:19:07,800 --> 01:19:14,010 Dus laten we eens kijken wat er gebeurt als we - hier zijn we gaan met de pijltjes om die opdracht 1080 01:19:14,010 --> 01:19:20,940 and Control A naar het begin, eval. 1081 01:19:20,940 --> 01:19:22,850 Oke, dus het werkt. 1082 01:19:22,850 --> 01:19:26,440 Wanneer u eval doen, het duurt wat erna komt en maakt het een commando. 1083 01:19:26,440 --> 01:19:29,460 Zo kunt u in wezen ontleden het tweemaal. 1084 01:19:29,460 --> 01:19:33,710 De sectie loopt hier deze opdracht tussen de aanhalingstekens, 1085 01:19:33,710 --> 01:19:36,210 krijgt de uitgang. 1086 01:19:36,210 --> 01:19:42,850 Uitgang wordt verondersteld hier worden uitgevoerd als die commando's zoals deze 1087 01:19:42,850 --> 01:19:45,890 in deze en deze. 1088 01:19:45,890 --> 01:19:50,100 Dus die commando's zijn nu hier in deze volgorde, 1089 01:19:50,100 --> 01:19:58,950 maar deze zijn ingebouwd commando's en het kan ze niet meteen. 1090 01:19:58,950 --> 01:20:06,440 Dus gaan we naar eval, eval pikt dat op, begint de hele zaak helemaal opnieuw, en het werkt. 1091 01:20:06,440 --> 01:20:18,460 Een voorbeeld van beide backquoting, eval, parsing, gevolgen van parsing, 1092 01:20:18,460 --> 01:20:21,910 en een opdracht die waarschijnlijk van weinig nut voor jou tegenwoordig. 1093 01:20:21,910 --> 01:20:25,540 Oke. Oke, umask. 1094 01:20:25,540 --> 01:20:32,160 Laten we eens kijken naar deze opdracht hier, umask 022. Ik vraag me af wat dat doet. 1095 01:20:32,160 --> 01:20:38,420 Laten we gewoon typen umask met niets na. 22. Oke. 1096 01:20:38,420 --> 01:20:44,350 022 en het opnieuw doen. 1097 01:20:44,350 --> 01:20:48,580 Zoals je misschien al geraden, umask zonder argumenten kan u de actuele masker; 1098 01:20:48,580 --> 01:20:51,760 umask met argumenten maakt het dat, maar dat was degene die ik al had. 1099 01:20:51,760 --> 01:20:53,800 Wat betekent 022 bedoel je? 1100 01:21:01,650 --> 01:21:07,080 Dat zijn hier de bescherming voor een bestand. 1101 01:21:07,080 --> 01:21:11,440 Zij bepalen wie mag lezen of schrijven of uitvoeren van het bestand. 1102 01:21:11,440 --> 01:21:16,560 Beschermingen worden ook wel permissies. 1103 01:21:16,560 --> 01:21:21,390 De R staat voor lezen, de w voor schrijven, 1104 01:21:21,390 --> 01:21:25,500 en x, die niet aanwezig zijn, betekent voeren. 1105 01:21:25,500 --> 01:21:27,260 Er zijn 3 categorieën zijn. 1106 01:21:27,260 --> 01:21:33,540 De laatste 3 elementen zijn in de categorie van de gebruiker. Die op mij van toepassing, de gebruiker. 1107 01:21:33,540 --> 01:21:36,870 Deze 3 hier van toepassing op de groep. 1108 01:21:36,870 --> 01:21:41,590 Het bestand behoort tot 1 groep, kan de gebruiker toebehoren aan meerdere groepen, 1109 01:21:41,590 --> 01:21:47,150 maar als de gebruiker in de groep waartoe het bestand behoort, 1110 01:21:47,150 --> 01:21:51,090 dan is deze bescherming geldt voor hem als hij niet de gebruiker. 1111 01:21:51,090 --> 01:21:54,230 En deze is iedereen anders. 1112 01:21:55,540 --> 01:21:57,690 Deze categorieën sluiten elkaar uit. 1113 01:21:57,690 --> 01:21:59,750 De gebruiker bescherming op hem van toepassing, 1114 01:21:59,750 --> 01:22:03,780 de groep bescherming van toepassing op leden van de groep anderen dan de gebruiker, 1115 01:22:03,780 --> 01:22:08,110 en de andere beveiligingen uitsluitend betrekking op andere dan de gebruiker en de leden van de groep mensen. 1116 01:22:08,110 --> 01:22:12,320 Als er een r of aw of een x, betekent dat bescherming wordt verleend. 1117 01:22:12,320 --> 01:22:13,950 Als er een koppelteken, betekent dit dat het niet is. 1118 01:22:13,950 --> 01:22:16,690 Er zijn eigenlijk andere dingen die hier kan worden gebracht naast deze, 1119 01:22:16,690 --> 01:22:18,350 die ik nu niet zal krijgen in. 1120 01:22:18,350 --> 01:22:24,450 De umask definieert een standaard voor bestanden die u maakt. 1121 01:22:24,450 --> 01:22:28,580 En als een masker, in principe het zegt dat de stukjes die je niet instellen. 1122 01:22:28,580 --> 01:22:30,450 Hoe is dit uitgegroeid tot stukjes? 1123 01:22:30,450 --> 01:22:33,240 Als u denkt dat van elk van deze als een octaal getal, 1124 01:22:33,240 --> 01:22:42,120 Dit is de 1s bit, is de 2s, dit is de 4s. 1125 01:22:42,120 --> 01:22:45,840 Dus 0 tot 7 1126 01:22:45,840 --> 01:22:51,770 zal beschrijven welke combinatie van r's, w's, en x's die je hebt voor deze 3 1127 01:22:51,770 --> 01:22:53,710 en evenveel voor deze en vervolgens deze. 1128 01:22:53,710 --> 01:23:12,030 Dus 022 betekent 0 voor andere, 2 voor de groep, 2 voor de gebruiker. 1129 01:23:12,030 --> 01:23:15,870 Maar dit is een masker. Het masker is wat je niet hebt. 1130 01:23:19,380 --> 01:23:20,610 Het spijt me. Ik gaf je dingen in de verkeerde volgorde. 1131 01:23:20,610 --> 01:23:25,620 Het is de eerste 3. Deze 3 zijn de gebruiker, deze 3 zijn de groep, deze 3 zijn de andere. 1132 01:23:25,620 --> 01:23:27,970 Sorry dat ik je deze gaf in de verkeerde volgorde. 1133 01:23:27,970 --> 01:23:31,910 De 0, die de eerste van deze, niet de waarde weer, 1134 01:23:31,910 --> 01:23:35,430 maar als een nummer is er niet, het is een 0. 1135 01:23:35,430 --> 01:23:38,370 Dat betekent dat alle 3 van deze zouden worden toegestaan. 1136 01:23:38,370 --> 01:23:41,550 Merk op dat dit een van de x is niet toegestaan. 1137 01:23:41,550 --> 01:23:44,090 De reden is dat de schil kan vaststellen 1138 01:23:44,090 --> 01:23:46,260 of een bestand mag niet worden uitgevoerd of. 1139 01:23:46,260 --> 01:23:49,800 Aangezien dit niet een uitvoerbaar bestand, heeft zij niet de x set. 1140 01:23:49,800 --> 01:23:54,000 De 2 betekent dat de toestemming, de tweede categorie te schrijven hier, 1141 01:23:54,000 --> 01:23:56,500 de een in het midden, wordt ontkend. 1142 01:23:56,500 --> 01:23:58,500 Dus nogmaals, dit zijn de dingen die hij ontkende. 1143 01:23:58,500 --> 01:24:02,080 Nou, is x toegestaan, maar het is niet hier, want het is niet uitvoerbaar 1144 01:24:02,080 --> 01:24:04,260 en zo vervolgens de anderen. 1145 01:24:04,260 --> 01:24:08,880 Dus dat is een veel voorkomende umask. 1146 01:24:08,880 --> 01:24:14,630 Een andere voorkomende is 700 - geef jezelf alles en niemand anders iets. 1147 01:24:14,630 --> 01:24:17,040 En er zijn andere mogelijkheden. 1148 01:24:21,340 --> 01:24:27,110 Ik kom terug om dat te gaan. Met behulp van de geschiedenis kan ik terug zoeken naar dat, LWH naar daar. 1149 01:24:27,110 --> 01:24:30,210 Oke. Dus hier, dit zijn de schelpen. 1150 01:24:30,210 --> 01:24:36,020 Bash, de eigenaar die het systeem rekening, kan alles doen. 1151 01:24:36,020 --> 01:24:41,210 Groep en iedereen kan doen lezen of uit te voeren, maar niet schrijven. 1152 01:24:41,210 --> 01:24:44,570 Deze heeft niet eens toestaan ​​dat de eigenaar te schrijven. 1153 01:24:44,570 --> 01:24:46,460 Indien de eigenaar wilde schrijven aan het, het systeem rekening, 1154 01:24:46,460 --> 01:24:48,020 hij zou de bescherming eerste veranderen. 1155 01:24:48,020 --> 01:24:53,940 Maar nogmaals, de umask stelt de standaard door te maskeren, 1156 01:24:53,940 --> 01:24:57,160 aangegeven door de bits die niet wordt ingesteld. 1157 01:24:57,160 --> 01:25:04,380 Dit is typisch een van de initialisatie bestanden die de. Cshrc voor de C-shell 1158 01:25:04,380 --> 01:25:07,500 of het profiel. voor de Bourne-soort schelpen. 1159 01:25:07,500 --> 01:25:12,520 Het kan ook elders zijn als er andere initialisatie bestanden op het systeem. 1160 01:25:12,520 --> 01:25:14,610 Maar goed, dat is umask. 1161 01:25:14,610 --> 01:25:18,180 Er is iets wat een beetje vreemd hier, 1162 01:25:18,180 --> 01:25:22,800 en dat is, waarom is er een enkel commando voor? 1163 01:25:22,800 --> 01:25:28,690 Als ik dit zou schrijven, zou ik het een variabele, umask = enige waarde te maken. 1164 01:25:28,690 --> 01:25:31,100 Waarom is er een hele opdracht alleen voor dit doel? 1165 01:25:31,100 --> 01:25:34,560 De reden is dit gaat gewoon terug naar de oorsprong van Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix was slechts enkele programmering project bij Bell Labs in de vroege jaren 1970. 1167 01:25:41,050 --> 01:25:42,610 Mensen kregen gewoon bij elkaar te programmeren. 1168 01:25:42,610 --> 01:25:45,290 Ze waren van plan nooit aan een wereldwijd opererend systeem. 1169 01:25:45,290 --> 01:25:47,250 Verschillende mensen schreven verschillende delen zonder na te denken veel 1170 01:25:47,250 --> 01:25:49,790 van hoe ze zouden worden gebruikt - nogal vaag. 1171 01:25:49,790 --> 01:25:53,290 En het kwam samen als dat, en het is nog steeds zo in sommige opzichten. 1172 01:25:53,290 --> 01:25:57,930 Zodat weerspiegelt de geschiedenis, en er zijn nog deze inconsistenties en oneven elementen ervan. 1173 01:25:57,930 --> 01:26:00,750 Oke. Volgende hier. 1174 01:26:08,170 --> 01:26:11,000 Zoals ik al eerder schreef, is de C-shell niet echt gewend heel veel voor de programmering, 1175 01:26:11,000 --> 01:26:12,420 maar het kan zijn. 1176 01:26:12,420 --> 01:26:15,080 Het voert langzamer, weer de trade-off tussen interactief gebruik, 1177 01:26:15,080 --> 01:26:17,820 die meer verwerking betrokken dan snelheid heeft, 1178 01:26:17,820 --> 01:26:20,710 die kan zonder verwerking. 1179 01:26:20,710 --> 01:26:28,320 De extra functies om de Bourne shell toegevoegd door Korn en Bourne-weer schelpen 1180 01:26:28,320 --> 01:26:32,120 niet lijken te vertragen, en ik weet niet waarom dat is. 1181 01:26:32,120 --> 01:26:36,310 Het zou zomaar kunnen betere programmering, maar ik ben niet in een positie om te weten. 1182 01:26:36,310 --> 01:26:40,420 Snelheid hier eigenlijk niet zo'n big deal, maar het wordt genoemd. 1183 01:26:40,420 --> 01:26:43,690 De reden is dat shell scripts eigenlijk vrij snel. 1184 01:26:43,690 --> 01:26:46,450 Als er veel commando's als in een calculationele programma, 1185 01:26:46,450 --> 01:26:49,110 je zou het waarschijnlijk niet doen in een shell script. 1186 01:26:49,110 --> 01:26:51,450 De operaties zijn er vrij eenvoudig en ongecompliceerd. 1187 01:26:51,450 --> 01:26:53,960 Degenen die ik heb meegemaakt die te langzaam 1188 01:26:53,960 --> 01:26:57,110 betrekken herhaalde aanvragen van langzame opdrachten. 1189 01:26:57,110 --> 01:27:00,480 Eerder noemde ik al de stream editor sed. Dat bevel is traag. 1190 01:27:00,480 --> 01:27:03,760 Als je sed vele malen uit te voeren, zul je een langzame script te krijgen, maar het is niet de shell dat is traag. 1191 01:27:03,760 --> 01:27:07,920 Draait het in de Bourne shell zal niet veel sneller dan het runnen van het in de C-shell is, 1192 01:27:07,920 --> 01:27:10,070 hoewel er misschien wat voordelen er zijn. 1193 01:27:10,070 --> 01:27:12,760 De aanvullende programmeermogelijkheden, anderzijds, 1194 01:27:12,760 --> 01:27:17,920 zijn belangrijke redenen waarom u de Bourne-soort schelpen zou gebruiken. 1195 01:27:17,920 --> 01:27:21,390 C-shell heeft oneven functies om het - 1196 01:27:21,390 --> 01:27:25,250 het feit dat je niet weet of een variabele is een shell variabele of een omgevingsvariabele. 1197 01:27:25,250 --> 01:27:27,440 Het kan heel verwarrend zijn. 1198 01:27:27,440 --> 01:27:32,170 Het is niet zo gemakkelijk om te schrijven 1199 01:27:32,170 --> 01:27:35,930 alleen gebaseerd op uw ervaring van programmeren in andere talen. 1200 01:27:35,930 --> 01:27:41,350 Ik denk dat je de Bourne-soort schelpen meer in overeenstemming met uw ervaring te vinden. 1201 01:27:43,730 --> 01:27:49,270 Sommige scripts, hoewel, kunnen duizenden regels lang. 1202 01:27:49,270 --> 01:27:52,450 Degenen die ik heb gezien zijn gebruikt voor het patchen van besturingssystemen. 1203 01:27:52,450 --> 01:27:55,450 Die kunnen heel langzaam uit te voeren, maar je hoeft niet lopen die heel vaak. 1204 01:27:55,450 --> 01:27:57,180 Het is pas wanneer je patchen doet, 1205 01:27:57,180 --> 01:27:59,450 en het is alleen de systeembeheerder die deze dingen doet, 1206 01:27:59,450 --> 01:28:01,840 dus het is niet echt veel van een probleem. 1207 01:28:01,840 --> 01:28:06,980 Degenen die honderden lijnen zijn lang daadwerkelijk uit te voeren vrij snel. 1208 01:28:06,980 --> 01:28:10,540 Waarin dit hier, wat zijn die verbeteringen? 1209 01:28:10,540 --> 01:28:13,170 Ik heb reeds een paar van hen - arrays, berekeningen, 1210 01:28:13,170 --> 01:28:20,540 de $ () uitdrukking voor berekeningen in de Bash shell, 1211 01:28:20,540 --> 01:28:23,050 de andere soort van opdracht substitutie. 1212 01:28:23,050 --> 01:28:25,360 Er zijn verschillende soorten testen opdrachten 1213 01:28:25,360 --> 01:28:29,350 waarmee je kunt conditionele tests op het bestaan ​​van een bestand of andere dingen. 1214 01:28:29,350 --> 01:28:34,790 Duren hier, deze opdracht hier. 1215 01:28:34,790 --> 01:28:38,480 Wat betekent dit doen, en waarom zou iemand gebruiken? 1216 01:28:51,170 --> 01:28:52,990 printenv variabelenaam. 1217 01:28:52,990 --> 01:28:56,130 We weten wat printenv doet. Het vertelt ons de waarde van een variabele. 1218 01:28:56,130 --> 01:29:00,850 En printenv variabelenaam zal ons niet veel vertellen, want er is geen dergelijke variabele. 1219 01:29:03,550 --> 01:29:05,120 Blank. 1220 01:29:05,120 --> 01:29:08,440 Maar laten we het eens iets zinvols. 1221 01:29:13,420 --> 01:29:16,800 Dat is er niet. Oke. Ik denk dat ik nooit gedefinieerd dat. 1222 01:29:16,800 --> 01:29:18,020 Laten we eens kijken gewoon mijn omgeving. 1223 01:29:18,020 --> 01:29:20,900 Dit is een ander commando waarmee je kunt je omgeving te inspecteren. 1224 01:29:20,900 --> 01:29:24,470 Er is goede oude EDITOR, degene die we eerder zagen. 1225 01:29:42,360 --> 01:29:44,120 Wat doet dat? 1226 01:29:44,120 --> 01:29:48,050 Hier hebben we een aanhalingsteken expressie. 1227 01:29:48,050 --> 01:29:50,370 Vergeet niet dat dit de C-shell. 1228 01:29:50,370 --> 01:29:54,850 Dus printenv EDITOR zal ons een waarde van REDACTEUR geven. Het is vi. 1229 01:29:54,850 --> 01:29:59,790 En dan zal het die waarde ingesteld op variabele een, het set commando. 1230 01:29:59,790 --> 01:30:02,860 Dus nu als ik echo $ a, krijg ik vi. 1231 01:30:02,860 --> 01:30:05,850 Dat lijkt niet erg zinvol. 1232 01:30:05,850 --> 01:30:08,080 Echter, het eigenlijk wel een doel. 1233 01:30:08,080 --> 01:30:12,260 Aangezien we niet weten of een variabele is een shell variabele of een omgevingsvariabele 1234 01:30:12,260 --> 01:30:16,280 door gebruik te maken van de evaluatie syntaxis dollarteken, kunnen we printenv gebruiken 1235 01:30:16,280 --> 01:30:19,460 om ervoor te zorgen dat het een omgevingsvariabele. 1236 01:30:19,460 --> 01:30:22,550 Dus als er een shell variabele editor, zou dit niet hebben gekregen het. 1237 01:30:22,550 --> 01:30:25,640 Dit werkt alleen met de omgevingsvariabele. 1238 01:30:25,640 --> 01:30:28,370 Als er een shell variabele en ik wilde haar waarde, 1239 01:30:28,370 --> 01:30:29,980 Dan moet ik een andere manier om het te doen. 1240 01:30:29,980 --> 01:30:33,530 Een manier om dat te doen zou zijn door te doen set en leidingen. 1241 01:30:33,530 --> 01:30:36,130 Dit is een van de metacharacters speciale karakters. 1242 01:30:36,130 --> 01:30:38,370 Het stuurt de uitgang van de set naar iets anders. 1243 01:30:38,370 --> 01:30:40,650 Laten we eens kijken wat we daar zouden kunnen vinden. 1244 01:30:40,650 --> 01:30:49,340 Niets. Oke. Laten we gewoon kijken wat er in zit allemaal samen. 1245 01:30:49,340 --> 01:30:53,580 Het was echo_style, degene die ik eerder genoemd. Oke, laten we dat doen. 1246 01:31:02,460 --> 01:31:06,230 Herinner me dat ik eerder al noemde, echo_style 1247 01:31:06,230 --> 01:31:08,410 bepaalt de manier waarop de echo commando wordt uitgevoerd. 1248 01:31:08,410 --> 01:31:10,940 BSD staat voor Berkeley Standard Distribution. 1249 01:31:10,940 --> 01:31:13,200 Dit is de Berkeley Unix uit de jaren 1970. 1250 01:31:13,200 --> 01:31:16,630 Dat is een van de manieren die echo kan draaien. 1251 01:31:16,630 --> 01:31:22,310 Instellen echo_style die waarde in de TC-shell zal veroorzaken echo om op die manier gedragen. 1252 01:31:22,310 --> 01:31:27,670 Dus stel dat doet, maar alleen ingesteld krijgt shellvariabelen. 1253 01:31:27,670 --> 01:31:35,430 Het zou EDITOR, die niet een shell variabele niet vinden. 1254 01:31:36,870 --> 01:31:38,050 Niets. 1255 01:31:38,050 --> 01:31:39,660 Dus dat is een manier om te onderscheiden hen. 1256 01:31:39,660 --> 01:31:42,000 Maar het feit dat je moet gaan door een aantal vreemde commando als dat 1257 01:31:42,000 --> 01:31:45,500 onderscheid te maken tussen shell variabelen of omgevingsvariabelen 1258 01:31:45,500 --> 01:31:49,970 toont het soort onpraktisch aard van de C-shell voor sommige doeleinden. 1259 01:31:52,290 --> 01:31:57,960 En nu, de laatste en misschien minst, dit is de man pagina's. 1260 01:31:57,960 --> 01:32:03,190 Degenen van wie u wellicht weet, is de man de opdracht kort voor de handleiding. 1261 01:32:03,190 --> 01:32:08,610 De man pagina's voor de schelpen zijn moeilijk te lezen. Ze zijn erg lang. 1262 01:32:08,610 --> 01:32:14,060 Ze zijn georganiseerd op een manier die het moeilijk maken om te vinden wat u zoekt. 1263 01:32:14,060 --> 01:32:15,980 Dus als u op zoek bent naar iets met een doel, 1264 01:32:15,980 --> 01:32:20,050 mag u niet weten of dat doel is een shell variabele of iets anders, 1265 01:32:20,050 --> 01:32:21,630 dus je kan niet weten waar te zoeken. 1266 01:32:21,630 --> 01:32:25,030 U kunt zoeken naar verschillende strings, maar de snaren worden vaak herhaald. 1267 01:32:25,030 --> 01:32:27,640 Dus het is over het algemeen moeilijk te lezen. 1268 01:32:27,640 --> 01:32:33,810 We keken naar de TC-shell man pagina een beetje voor de eval-commando te vinden. 1269 01:32:33,810 --> 01:32:36,610 Sommige dingen gaan sneller. 1270 01:32:36,610 --> 01:32:38,860 Een benadering is om te zoeken naar een string. 1271 01:32:38,860 --> 01:32:40,360 U kunt de pager gebruiken. 1272 01:32:40,360 --> 01:32:49,080 Pager heeft de schuine streep op zoek naar een commando of een string in een pager operatie. 1273 01:32:49,080 --> 01:32:52,830 Man standaard zullen gebruiken pagers, ofwel meer of minder. 1274 01:32:52,830 --> 01:32:56,560 Ik weet niet of je bekend bent met die bent, maar die kunnen bestanden beetje bij beetje laten zien. 1275 01:32:56,560 --> 01:33:00,550 Ik gebruik MINDER deze specifieke bestanden die we hier hebben laten zien. 1276 01:33:00,550 --> 01:33:03,300 U kunt binnen zoeken daar. 1277 01:33:03,300 --> 01:33:04,880 U kunt proberen met behulp van verschillende zoekstrings. 1278 01:33:04,880 --> 01:33:08,420 Ook man pagina's in verschillende besturingssystemen kan niet hetzelfde zijn. 1279 01:33:08,420 --> 01:33:11,130 Ze kunnen aparte pagina's voor csh en tcsh. 1280 01:33:11,130 --> 01:33:14,500 Ze zijn niet op de Mac, maar ze zouden kunnen worden als die twee aparte commando. 1281 01:33:14,500 --> 01:33:19,000 Als sh niet echt Bash doet oproep, is er waarschijnlijk een aparte man-pagina zijn. 1282 01:33:19,000 --> 01:33:25,820 Sommige systemen hebben een aparte man pagina's alleen voor de ingebouwde C-shell commando's. 1283 01:33:25,820 --> 01:33:30,250 Soms als u wilt lezen een beschrijving van een ingebouwde opdracht 1284 01:33:30,250 --> 01:33:35,350 dat is ook in het pad, zoals echo, moet u de man pagina lezen op dat commando op echo 1285 01:33:35,350 --> 01:33:37,610 om te bepalen hoe het zal werken als een ingebouwde opdracht 1286 01:33:37,610 --> 01:33:39,760 zelfs als je niet belt de ingebouwde opdracht. 1287 01:33:41,630 --> 01:33:46,090 Dat is een nadeel van het besturingssysteem in het algemeen, niet alleen voor de schelpen, 1288 01:33:46,090 --> 01:33:50,710 hoewel voor de schelpen in het bijzonder de man-pagina's zijn vrij lang, 1289 01:33:50,710 --> 01:33:56,180 deels omdat ze nuttige functies heeft toegevoegd aan hen, die een positief kan zijn. 1290 01:33:56,180 --> 01:34:00,290 Oke. Zijn er nog vragen? Elke onderwerpen die u wilt brengen? 1291 01:34:00,290 --> 01:34:03,390 Iets relevant hier? 1292 01:34:04,540 --> 01:34:07,100 Nou, het is al heel leuk gesprek met u allen. 1293 01:34:07,100 --> 01:34:09,690 Ik hoop dat je iets uit dit seminar 1294 01:34:09,690 --> 01:34:13,080 dat zal nuttig zijn voor u in uw toekomstige inspanningen. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]