1 00:00:00,000 --> 00:00:02,320 >> [Seminario - Unix Shells, Ambienti] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [Questo è CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Tema di oggi è la shell Unix. 5 00:00:12,770 --> 00:00:20,600 Sono Douglas Kline, esperto, o almeno l'uso ragionevolmente competente, del guscio. 6 00:00:20,600 --> 00:00:25,280 Una shell è l'interfaccia per l'utente di sistema operativo del computer. 7 00:00:25,280 --> 00:00:29,580 Il nome è fuorviante, in quanto, a differenza di guscio di un animale, 8 00:00:29,580 --> 00:00:34,890 che è dura e protettiva, il guscio calcolatore permette la comunicazione. 9 00:00:34,890 --> 00:00:39,120 Così membrana porosa probabilmente sarebbe una metafora migliore. 10 00:00:39,120 --> 00:00:44,500 >> La scocca originale per Unix è la shell Bourne. 11 00:00:44,500 --> 00:00:46,450 Bourne è scritto B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne è stato uno degli autori originali di Unix, 13 00:00:49,770 --> 00:00:51,700 e così il guscio porta il suo nome. 14 00:00:51,700 --> 00:00:54,850 Il nome di quel guscio come comando è semplicemente sh. 15 00:00:54,850 --> 00:00:57,400 Questo è il comando è possibile eseguire. 16 00:00:57,400 --> 00:01:00,810 La shell inizia login. 17 00:01:00,810 --> 00:01:04,459 Quando si accede al computer, la shell inizia a correre solo per te, 18 00:01:04,459 --> 00:01:06,820 e questo è quello che prende i comandi. 19 00:01:06,820 --> 00:01:09,790 Si può iniziare anche in altri momenti. 20 00:01:09,790 --> 00:01:16,780 Se si apre una finestra con nessuna altra indicazione, si avvierà una shell per voi. 21 00:01:16,780 --> 00:01:20,450 Ecco come è che si può andare a una finestra e iniziare a digitare i comandi 22 00:01:20,450 --> 00:01:23,960 e così via, lì anche se non avete accede a quella finestra. 23 00:01:23,960 --> 00:01:26,670 Inoltre, se si fa un login remoto, 24 00:01:26,670 --> 00:01:30,250 allora inizierà una shell sul computer remoto. 25 00:01:30,250 --> 00:01:44,310 Ed è possibile eseguire comandi senza una shell interattiva. 26 00:01:44,310 --> 00:01:48,990 Che può significare all'interno della vostra operazione in corso, 27 00:01:48,990 --> 00:01:50,700 e può anche significare un funzionamento a distanza. 28 00:01:50,700 --> 00:01:52,900 Si può inviare un comando a un altro computer, 29 00:01:52,900 --> 00:01:55,460 che comprende l'avvio di una shell. 30 00:01:55,460 --> 00:01:57,760 Infatti, essa deve comprendere avviare una shell ci 31 00:01:57,760 --> 00:02:01,740 anche se questo non è il vostro scopo finale. 32 00:02:05,310 --> 00:02:12,350 Quando qualcosa comincia in questo modo, non necessariamente avviare una nuova shell. 33 00:02:12,350 --> 00:02:17,430 Se si apre una nuova finestra, è possibile dire che per aprire un editor 34 00:02:17,430 --> 00:02:18,940 o qualche altro comando. 35 00:02:18,940 --> 00:02:20,560 In tal caso, l'editor ripartire da zero. 36 00:02:20,560 --> 00:02:22,930 Quando l'editor finisce, la finestra si conclude. 37 00:02:22,930 --> 00:02:24,620 Questo è un po 'insolita ma può essere fatto. 38 00:02:24,620 --> 00:02:27,140 In tali casi, non sarà una shell. 39 00:02:27,140 --> 00:02:31,890 Quindi non è necessariamente il caso che una finestra o qualche applicazione, si apre una shell. 40 00:02:31,890 --> 00:02:34,030 >> Shell analizza i comandi. 41 00:02:34,030 --> 00:02:40,900 Analisi significa identificare i vari elementi e la loro classificazione. 42 00:02:40,900 --> 00:02:43,470 All'interno di un comando, la stringa completa che si digita, 43 00:02:43,470 --> 00:02:47,310 ci saranno uno o più singoli comandi da eseguire. 44 00:02:47,310 --> 00:02:50,050 Altri elementi possono essere argomenti. 45 00:02:50,050 --> 00:02:55,020 Ci possono essere anche caratteri speciali che possono influenzare l'esecuzione di un comando. 46 00:02:55,020 --> 00:02:59,710 Possono inviare l'output altrove rispetto allo schermo 47 00:02:59,710 --> 00:03:01,750 se il comando sarebbe stato normalmente invia allo schermo. 48 00:03:01,750 --> 00:03:04,390 Si può reindirizzare ingresso, ma può fare anche altre cose. 49 00:03:04,390 --> 00:03:08,120 Ci sono vari altri simboli, personaggi e così via. 50 00:03:08,120 --> 00:03:13,600 Analisi coinvolge rilevare e interpretare le cose. 51 00:03:13,600 --> 00:03:19,560 >> Ora, se non ci sono altre domande, che è piuttosto probabile dal momento che non ci sono più persone, 52 00:03:19,560 --> 00:03:24,620 andremo alla mia prossima pagina qui. 53 00:03:24,620 --> 00:03:29,170 >> Ho detto prima che la Bourne shell è la shell iniziale. 54 00:03:29,170 --> 00:03:31,550 Ci sono altri. 55 00:03:31,550 --> 00:03:34,520 Uno è il C-shell. Il comando è csh. 56 00:03:34,520 --> 00:03:36,830 Il nome di C-shell è solo un gioco di parole. 57 00:03:36,830 --> 00:03:41,260 Questo guscio è stato introdotto con la Berkeley Unix a metà degli anni 1970. 58 00:03:41,260 --> 00:03:44,830 Berkeley Unix era un evento fondamentale nello sviluppo di Unix. 59 00:03:44,830 --> 00:03:48,770 E 'stata una rivoluzione enorme e comprendeva l'introduzione di questa shell. 60 00:03:48,770 --> 00:03:50,790 La ragione di tale gioco di parole, C-shell, 61 00:03:50,790 --> 00:03:56,490 è che il C-shell ha alcune caratteristiche in esso che ricordano il linguaggio C, 62 00:03:56,490 --> 00:03:59,740 che la Bourne shell non ha - 63 00:03:59,740 --> 00:04:02,140 o non ha avuto in quel momento. 64 00:04:02,140 --> 00:04:05,190 C'è anche il TC-shell. 65 00:04:05,190 --> 00:04:07,360 Questo è un superset del C-shell. 66 00:04:07,360 --> 00:04:11,470 Ha caratteristiche aggiuntive, molte delle quali sono utili per uso interattivo, 67 00:04:11,470 --> 00:04:16,050 come ricordando comandi nel meccanismo storia, 68 00:04:16,050 --> 00:04:18,459 che descriverò po 'più tardi - 69 00:04:18,459 --> 00:04:23,120 in modo semplice, modellato un editor. 70 00:04:23,120 --> 00:04:29,170 Ha anche le associazioni che permettono di associare una breve stringa chiave a un comando più lungo. 71 00:04:29,170 --> 00:04:31,440 Non stiamo andando a essere sempre in quella di oggi. 72 00:04:31,440 --> 00:04:33,650 Ha alcune caratteristiche che sono utili per la programmazione. 73 00:04:33,650 --> 00:04:37,020 Tuttavia, la C-shell non viene spesso utilizzato per la programmazione di shell. 74 00:04:37,020 --> 00:04:39,080 Programmi di shell, se non avete già sapete, 75 00:04:39,080 --> 00:04:41,690 sono programmi che consistono di caratteristiche shell. 76 00:04:41,690 --> 00:04:43,220 È possibile eseguire questi programmi. 77 00:04:43,220 --> 00:04:46,760 Si scrive un gruppo di comandi di shell in un file ed eseguire il file. 78 00:04:46,760 --> 00:04:49,760 Non c'è bisogno di compilarlo. Questo è un linguaggio interpretativo. 79 00:04:49,760 --> 00:04:57,320 La frase C-shell è ambiguo in quanto potrebbe indicare solo l'originale C-shell, csh, 80 00:04:57,320 --> 00:05:01,200 o per tutti i C-shell, compresi tcsh. E 'un po' ambiguo. 81 00:05:01,200 --> 00:05:08,250 >> Una shell più tardi è la shell Korn, ksh, dal nome del programmatore, Korn. 82 00:05:08,250 --> 00:05:14,160 Questo guscio ha tentato di incorporare in uno shell 83 00:05:14,160 --> 00:05:16,960 i vantaggi della C-shell per uso interattivo 84 00:05:16,960 --> 00:05:19,230 e la Bourne shell per la programmazione. 85 00:05:19,230 --> 00:05:25,440 E 'stato usato come una shell interattiva da alcune persone - una minoranza. 86 00:05:25,440 --> 00:05:32,050 Più tardi però, c'era un'altra introduzione, la shell Bash, BASH, 87 00:05:32,050 --> 00:05:35,290 ancora una volta un gioco di parole, Bourne-again shell. 88 00:05:35,290 --> 00:05:43,830 Si tratta di un'estensione della shell Bourne. Korn shell è anche. Entrambi sono. 89 00:05:43,830 --> 00:05:48,100 Ha gli stessi obiettivi della Korn shell di amalgama di C-shell 90 00:05:48,100 --> 00:05:50,980 ed i vantaggi di Bourne shell in 1 shell. 91 00:05:50,980 --> 00:05:56,810 Molti dei miglioramenti della shell Korn sono anche incluse in Bash. 92 00:05:56,810 --> 00:06:00,710 Bash, tuttavia, ha più ed è quindi preferibile. 93 00:06:00,710 --> 00:06:05,180 La Bourne-again shell e la Korn shell sono chiamati Bourne tipo conchiglie 94 00:06:05,180 --> 00:06:07,730 perché includono le caratteristiche della Bourne shell, 95 00:06:07,730 --> 00:06:11,180 che sono incompatibili in alcuni aspetti con C-shell. 96 00:06:11,180 --> 00:06:15,520 Ci sono altre shell oltre a quelli, alcuni destinati ad uso limitato, 97 00:06:15,520 --> 00:06:20,670 forse limitato ad alcuni comandi, forse scopi specialistici, spesso non utilizzati. 98 00:06:20,670 --> 00:06:24,240 Va bene >>. Articolo successivo qui. 99 00:06:31,300 --> 00:06:38,970 La shell Bash è diventato associato a varie forme di Linux. 100 00:06:38,970 --> 00:06:41,550 Non sono sicuro se questo è vero per ogni forma. 101 00:06:41,550 --> 00:06:43,280 Ci sono molte forme là fuori e io non li hanno utilizzati, 102 00:06:43,280 --> 00:06:46,870 ma in quelli che ho usato è diventato associato con esso. 103 00:06:46,870 --> 00:06:49,670 Per quanto ne so, non c'è nulla di Bash 104 00:06:49,670 --> 00:06:52,210 che lo rende più compatibile con Linux 105 00:06:52,210 --> 00:06:55,020 rispetto a qualsiasi altra combinazione di guscio e sistema operativo. 106 00:06:55,020 --> 00:06:59,690 Penso che questo probabilmente riflette solo le inclinazioni dei programmatori. 107 00:06:59,690 --> 00:07:07,500 Che è diventato associato a Linux è un altro motivo per preferire Bash a ksh 108 00:07:07,500 --> 00:07:11,820 poiché le cose sono suscettibili di essere scritto in esso ed è probabile che si diffonda. 109 00:07:11,820 --> 00:07:15,410 Ti darò altre ragioni per che più tardi. 110 00:07:15,410 --> 00:07:21,330 Script di Bourne shell dovrebbero essere eseguiti sotto la shell Korn e Bash. 111 00:07:21,330 --> 00:07:22,650 Se si scrive qualcosa per la shell Bourne, 112 00:07:22,650 --> 00:07:26,180 probabilmente è possibile eseguire sotto ksh o bash. 113 00:07:26,180 --> 00:07:30,610 Korn shell script sarà probabilmente eseguito in Bash, ma non posso garantirlo. 114 00:07:30,610 --> 00:07:36,040 Più tardi qui, gli script di C-shell dovrebbero funzionare sotto il TC-shell. 115 00:07:38,850 --> 00:07:41,690 Il C-shell è stato effettivamente mai ampiamente utilizzata per lo scripting 116 00:07:41,690 --> 00:07:48,110 poiché la Bourne shell e poi le shell di tipo Bourne fosse preferibile per tale scopo. 117 00:07:48,110 --> 00:07:50,620 In modo che non è poi così importante. 118 00:07:50,620 --> 00:07:53,480 Ci sono un sacco di Bourne script di shell che sono state scritte molto tempo fa, 119 00:07:53,480 --> 00:07:56,860 prima che la shell Korn o la Bourne-Again Shell sono state introdotte. 120 00:07:56,860 --> 00:07:59,300 Quelli sono ancora in uso, parte dei sistemi operativi, 121 00:07:59,300 --> 00:08:01,590 e così li troverete se si guarda al sistema operativo 122 00:08:01,590 --> 00:08:03,760 o alcuni vecchi pacchetti di programmazione. 123 00:08:03,760 --> 00:08:12,840 >> Bash è in qualche modo diventare una sorta di lingua franca per i sistemi operativi. 124 00:08:12,840 --> 00:08:17,580 E 'già stato esteso a Windows e VMS. 125 00:08:17,580 --> 00:08:20,440 VMS, nel caso in cui non si conosce, è un sistema operativo proprietario 126 00:08:20,440 --> 00:08:25,480 di Digital Equipment Corporation, che è ancora in uso, in gran parte dietro le quinte. 127 00:08:25,480 --> 00:08:29,250 E se sta andando ad essere in esecuzione su diversi sistemi operativi, 128 00:08:29,250 --> 00:08:31,110 probabilmente le persone tendono a spostarsi per esso. 129 00:08:31,110 --> 00:08:33,840 Ma questo sviluppo è relativamente recente. 130 00:08:33,840 --> 00:08:39,490 E 'solo all'inizio, quindi non posso prevedere se questo si rivelerà essere davvero quel tipo di lingua franca. 131 00:08:39,490 --> 00:08:43,539 Inoltre, poiché percorsi di file e librerie differiscono 132 00:08:43,539 --> 00:08:46,210 tra questi diversi sistemi operativi, 133 00:08:46,210 --> 00:08:50,250 potrebbe non essere in grado di scrivere uno script Bash su un sistema operativo 134 00:08:50,250 --> 00:08:51,840 e poi eseguirlo su un altro. 135 00:08:51,840 --> 00:08:54,440 Dovreste essere in grado di spostare tra le diverse Unix, Linux 136 00:08:54,440 --> 00:08:59,020 I sistemi operativi Mac OS, ma non necessariamente a Windows o VMS. 137 00:08:59,020 --> 00:09:01,390 Potrebbe essere necessario modificare le descrizioni di file nomi di percorso, 138 00:09:01,390 --> 00:09:03,180 e alcune librerie potrebbero essere differenti, 139 00:09:03,180 --> 00:09:05,230 che possono influenzare il modo in cui alcuni comandi funzionano 140 00:09:05,230 --> 00:09:09,730 o come si elaborano gli argomenti e simili. 141 00:09:09,730 --> 00:09:19,230 In aggiunta a ciò, un altro cautela qui è che non vi è alcuna garanzia 142 00:09:19,230 --> 00:09:23,570 che tutte le varie shell che ho citato - Bourne shell, C-shell, 143 00:09:23,570 --> 00:09:29,880 TC-shell, shell Korn, Bourne-again shell - sarà disponibile in qualsiasi Unix 144 00:09:29,880 --> 00:09:33,750 o Linux o Mac OS. 145 00:09:33,750 --> 00:09:35,620 Essi semplicemente potrebbero non essere lì. 146 00:09:35,620 --> 00:09:38,300 Questa è una delle cautele qui. 147 00:09:38,300 --> 00:09:41,490 Si tratta di uno sfortunato limitazione qui perché vuoi cose funzionino ovunque, 148 00:09:41,490 --> 00:09:44,380 ma purtroppo, non si può fare affidamento su questo. 149 00:09:44,380 --> 00:09:47,230 Va bene >>. Uno accanto qui. 150 00:09:50,280 --> 00:09:54,370 Diciamo che si desidera scrivere uno script di shell, 151 00:09:54,370 --> 00:09:57,170 un programma costituito da comandi di shell. 152 00:09:57,170 --> 00:10:01,200 Tu scrivi i comandi, li metti in un file, ed eseguire il file. 153 00:10:01,200 --> 00:10:04,230 Che cosa succede se si desidera includere argomenti? 154 00:10:04,230 --> 00:10:09,650 Nel caso di operazioni di shell, gli argomenti sono detti parametri o parametri posizionali 155 00:10:09,650 --> 00:10:15,940 ed essi saranno chiamati dal simbolo del dollaro e numerale, $ 1, $ 2. 156 00:10:15,940 --> 00:10:27,000 Quindi, se lo script ha questo nome, il mio primo argomento potrebbe essere argomento 1 157 00:10:27,000 --> 00:10:30,540 e il mio secondo potrebbe essere argomento 2, 158 00:10:30,540 --> 00:10:34,110 e dentro il mio script se voglio fare riferimento a queste cose - 159 00:10:34,110 --> 00:10:36,810 cerchiamo di cancellare questo dato che non ho davvero intenzione di farlo funzionare - 160 00:10:36,810 --> 00:10:42,160 dentro il mio script potrei avere $ 1 per riferirsi a arg1, 161 00:10:42,160 --> 00:10:45,890 $ 2, che uscirà in quel modo, arg2. 162 00:10:45,890 --> 00:10:50,080 Così quei simboli sono a disposizione per fare riferimento ad argomenti, 163 00:10:50,080 --> 00:10:52,390 e quelli si applicano a tutte le conchiglie. 164 00:10:52,390 --> 00:10:56,520 In aggiunta, ci sono altri caratteri. 165 00:10:56,520 --> 00:11:01,700 $ * Si riferisce a tutta la lista degli argomenti, tutti loro. 166 00:11:01,700 --> 00:11:05,390 $ # Si riferisce al numero di argomenti. 167 00:11:05,390 --> 00:11:07,910 Ancora una volta, questo vale per tutti i gusci. 168 00:11:07,910 --> 00:11:15,540 Tali simboli * e #, possono essere utilizzati con i significati in altri luoghi anche. 169 00:11:15,540 --> 00:11:17,940 Noi non sarà sempre in quello. 170 00:11:17,940 --> 00:11:20,460 >> Linea identificatore Shell. Che cosa è che per? 171 00:11:20,460 --> 00:11:27,760 Diciamo che hai scritto una sceneggiatura ed è per una particolare shell e si desidera eseguire. 172 00:11:27,760 --> 00:11:33,500 Come fai a sapere che cosa shell del sistema operativo verrà utilizzato per eseguire lo script? 173 00:11:33,500 --> 00:11:37,230 A un certo punto si potrebbe supporre che avrebbe eseguito nella shell Bourne 174 00:11:37,230 --> 00:11:39,440 se non hai detto altrimenti, 175 00:11:39,440 --> 00:11:41,730 ma la gente non stanno scrivendo script nella Bourne shell che tanto più 176 00:11:41,730 --> 00:11:43,750 e non si può nemmeno invocare tale più. 177 00:11:43,750 --> 00:11:48,740 Quindi qui abbiamo una linea identificatore shell proprio qui. 178 00:11:48,740 --> 00:11:52,450 Che specifica Bash. 179 00:11:52,450 --> 00:11:56,750 Si noti che specifica nel percorso, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Se un computer ha la shell Bash, ma non nella directory bin, / bin, questo non funzionerà. 181 00:12:02,870 --> 00:12:06,870 Questo è un altro qualificatore, un'altra cautela qui. 182 00:12:06,870 --> 00:12:09,500 Il cancelletto è il carattere riga di commento. 183 00:12:09,500 --> 00:12:12,300 Ciò vale per tutte le shell. 184 00:12:12,300 --> 00:12:18,610 Il caso particolare qui, #! all'inizio di uno script, è un caso speciale. 185 00:12:18,610 --> 00:12:23,410 Che specifica la shell in cui eseguire lo script. 186 00:12:23,410 --> 00:12:30,230 Come dicevo, potrebbe non essere lo stesso luogo / bin. 187 00:12:30,230 --> 00:12:34,880 Inoltre, c'è un'altra cosa qui. 188 00:12:34,880 --> 00:12:41,250 Se si utilizza il simbolo di cancelletto senza punto esclamativo e il percorso, 189 00:12:41,250 --> 00:12:44,640 che dovrebbe indicare un C-shell. 190 00:12:44,640 --> 00:12:48,300 Comunque, io non consiglio di farlo perché non sono in grado di garantire 191 00:12:48,300 --> 00:12:49,750 che questo sarà sempre funziona. 192 00:12:49,750 --> 00:12:52,220 Se si desidera un C-shell, sarebbe meglio dire così. 193 00:12:52,220 --> 00:12:58,450 Poi c'è qualcosa piuttosto confuso qui. 194 00:12:58,450 --> 00:13:03,940 Se si utilizza una linea shell identificatore come / bin / bash 195 00:13:03,940 --> 00:13:07,070 e che la shell non è disponibile qui, 196 00:13:07,070 --> 00:13:10,680 non c'è cosa come / bin / bash su quel particolare computer, 197 00:13:10,680 --> 00:13:14,330 sia perché non ha Bash o perché è in una posizione diversa, 198 00:13:14,330 --> 00:13:17,450 si otterrà un errore che indica che lo script è stato eseguito non esiste. 199 00:13:17,450 --> 00:13:21,510 E naturalmente esiste script, in modo che il messaggio di errore è confusa. 200 00:13:21,510 --> 00:13:24,810 La ragione per cui il sistema operativo che ti dà errore 201 00:13:24,810 --> 00:13:28,370 o, più precisamente, che la vostra shell interattiva in cui si esegue questo dà questo errore, 202 00:13:28,370 --> 00:13:33,510 è che riporta il comando che hai usato, che è il nome dello script. 203 00:13:33,510 --> 00:13:36,920 Questo comando efficacemente chiamato il guscio con il nome dello script. 204 00:13:36,920 --> 00:13:39,330 Ecco dove si ottiene il messaggio di errore confusione. 205 00:13:39,330 --> 00:13:42,980 Un altro modo per chiamare script di shell 206 00:13:42,980 --> 00:13:45,910 è specificando la shell sulla riga di comando, come qui. 207 00:13:45,910 --> 00:13:52,510 Questo è un comando. Questo dice eseguito Bash e quindi eseguire il mio script in Bash. 208 00:13:52,510 --> 00:13:55,680 Che avrà la precedenza su una linea identificatore, 209 00:13:55,680 --> 00:14:02,090 e questo ha la caratteristica di permettere di fornire per percorsi diversi. 210 00:14:02,090 --> 00:14:04,840 Se basta dare un comando, il sistema operativo cercherà quel comando 211 00:14:04,840 --> 00:14:06,410 in vari luoghi. 212 00:14:06,410 --> 00:14:08,820 Se è disponibile, dovrebbe trovarlo. 213 00:14:08,820 --> 00:14:12,290 Il computer troverà Bash ovunque si trova ed eseguirlo, 214 00:14:12,290 --> 00:14:15,470 quindi non c'è bisogno poi di essere preoccupato per dove si trova. 215 00:14:15,470 --> 00:14:17,360 Ci sono potenzialmente altre preoccupazioni qui, 216 00:14:17,360 --> 00:14:20,830 come se ci fosse più di 1 versione di Bash, che è possibile, anche se improbabile. 217 00:14:20,830 --> 00:14:23,540 Ecco, questo è un altro modo per affrontare queste cose. 218 00:14:23,540 --> 00:14:30,480 Linee Prescrizione possono chiamare qualsiasi shell. 219 00:14:30,480 --> 00:14:34,480 Essi possono anche chiamare le cose diverse da conchiglie. 220 00:14:34,480 --> 00:14:37,940 Esempi che ho qui sono sed, che è l'editor di flusso; 221 00:14:37,940 --> 00:14:39,900 awk, che è un linguaggio di elaborazione del modello; 222 00:14:39,900 --> 00:14:43,680 e perl, un linguaggio di scripting molto altamente sviluppata. 223 00:14:43,680 --> 00:14:47,570 Se si mette una linea identificatore che indica uno di quei programmi all'inizio, 224 00:14:47,570 --> 00:14:51,270 andrà direttamente in quel programma, piuttosto che avviare una shell. 225 00:14:51,270 --> 00:14:54,030 Tali programmi hanno dei limiti alle loro capacità. 226 00:14:54,030 --> 00:14:58,790 Perl è molto capace. Sed è un editor. Si può fare cose oltre la semplice modifica. 227 00:14:58,790 --> 00:15:03,300 Ma può essere difficile da programmare che. 228 00:15:03,300 --> 00:15:09,670 Inoltre, il passaggio di argomenti e roba di script è impossibile o confusione. 229 00:15:09,670 --> 00:15:15,030 Quindi, in questi casi, con awk o sed, è, almeno nella mia esperienza, 230 00:15:15,030 --> 00:15:18,910 preferibile scrivere un guscio sceneggiatura e chiamata awk o sed dallo script di shell 231 00:15:18,910 --> 00:15:24,660 piuttosto che chiamare awk o sed come la linea dello script identificatore. 232 00:15:24,660 --> 00:15:26,980 Perl è un linguaggio altamente diversificata, come ho detto. 233 00:15:26,980 --> 00:15:30,050 Non è possibile eseguire comandi interattivi in ​​perl, 234 00:15:30,050 --> 00:15:32,660 il che significa che non è possibile testare parti di script che si sta in via di sviluppo 235 00:15:32,660 --> 00:15:33,970 eseguendo interattivamente. 236 00:15:33,970 --> 00:15:36,160 Tuttavia, è un linguaggio estremamente capace 237 00:15:36,160 --> 00:15:40,960 e si è sviluppato in uno strumento molto diffuso. 238 00:15:40,960 --> 00:15:45,720 Questo è solo un po 'di un'osservazione parentesi le linee identificatori. 239 00:15:45,720 --> 00:15:50,610 >> In tutta o la maggior parte delle forme di Linux - ancora una volta, non posso essere sicuro che è tutto - 240 00:15:50,610 --> 00:15:57,900 e in Mac OS, se si digita csh si ottiene tcsh, 241 00:15:57,900 --> 00:16:00,570 e se si digita sh si ottiene bash. 242 00:16:00,570 --> 00:16:05,020 Stavano cercando lì per dare le versioni più avanzate di questi gusci, 243 00:16:05,020 --> 00:16:07,940 ma questo può essere fonte di confusione. 244 00:16:07,940 --> 00:16:16,720 Se si scrive uno script utilizzando tcsh o Bash caratteristiche durante la chiamata csh o sh 245 00:16:16,720 --> 00:16:22,230 e quindi provare a farlo funzionare su un computer che non dispone di tcsh o Bash, 246 00:16:22,230 --> 00:16:25,050 si potrebbe ottenere alcuni errori se ci sono comandi in là 247 00:16:25,050 --> 00:16:27,970 che quelle conchiglie non riconoscono. 248 00:16:27,970 --> 00:16:34,120 Inoltre, si può avere richiamato la vostra shell sul computer locale 249 00:16:34,120 --> 00:16:37,700 definendolo come sh o csh e quindi ottenere le conchiglie più avanzate. 250 00:16:37,700 --> 00:16:41,440 Si può anche non pensare al fatto che si sta utilizzando la shell più avanzate. 251 00:16:41,440 --> 00:16:45,670 Quindi questo è un potenziale problema. 252 00:16:45,670 --> 00:16:50,290 Come si determina che, se si digita sh si ottiene Bash, 253 00:16:50,290 --> 00:16:55,580 se si digita csh si ottiene tsch? 254 00:16:55,580 --> 00:16:59,940 Ci sono cose in questi computer chiamati link 255 00:16:59,940 --> 00:17:06,460 che può collegarsi ai nomi dei file per fare riferimento alla stessa cosa. 256 00:17:06,460 --> 00:17:12,180 Può essere sia 2 nomi per lo stesso file o un file il cui scopo è quello di fare riferimento a un altro file. 257 00:17:12,180 --> 00:17:17,550 Si chiamano hard link e simbolici. Noi non torneremo in più così oggi. 258 00:17:17,550 --> 00:17:21,619 Ci possono essere anche file separati - 1 file sh, 1 file Bash - 259 00:17:21,619 --> 00:17:23,880 ma entrambi corrono Bash. 260 00:17:23,880 --> 00:17:29,350 Poi c'è un altro qualificatore qui. 261 00:17:29,350 --> 00:17:42,640 Se stai chiamando uno di questi gusci con un solo nome, 262 00:17:42,640 --> 00:17:46,640 si potrebbe pensare che si otterrebbe la stessa funzionalità chiamandolo con un altro nome. 263 00:17:46,640 --> 00:17:49,700 Beh, che in realtà non è necessariamente vero. 264 00:17:49,700 --> 00:17:55,020 Questi comandi possono esaminare il nome con cui venivano chiamati 265 00:17:55,020 --> 00:18:00,020 e possono, sulla base di questo nome, in modo diverso. 266 00:18:00,020 --> 00:18:02,740 Ci possono essere problemi di cercare di conformarsi a uno standard. 267 00:18:02,740 --> 00:18:06,060 Alcuni di voi avranno sentito parlare di standard POSIX o un altro, 268 00:18:06,060 --> 00:18:08,730 forse altre caratteristiche. 269 00:18:08,730 --> 00:18:14,520 Questo può essere selezionato a volte dagli argomenti della riga di comando 270 00:18:14,520 --> 00:18:17,310 o impostando le variabili di shell. 271 00:18:17,310 --> 00:18:22,170 Chiamarlo come sh o bash può effettivamente portare ad un'esecuzione diversa 272 00:18:22,170 --> 00:18:25,300 anche se è lo stesso file che si sta eseguendo. 273 00:18:25,300 --> 00:18:31,800 Un'altra cosa da considerare è che, anche se un altro computer dispone di tcsh o Bash, 274 00:18:31,800 --> 00:18:35,310 se non sono legati come sono sul computer locale 275 00:18:35,310 --> 00:18:37,990 se si dispone di un computer locale Linux o Mac OS, 276 00:18:37,990 --> 00:18:45,630 poi di nuovo si otterrà il guscio che si chiama sh o csh, non quello che si potrebbe preferire. 277 00:18:50,430 --> 00:19:01,130 L'attuale Bourne shell ha miglioramenti minore rispetto a quelli in Bash 278 00:19:01,130 --> 00:19:06,100 ma oltre quelli della shell Bourne originale. 279 00:19:06,100 --> 00:19:09,690 Come risultato di ciò, anche la shell Bourne corrente, SH, 280 00:19:09,690 --> 00:19:14,560 anche quando non è Bash, ricorda il linguaggio C più della C-shell fa. 281 00:19:14,560 --> 00:19:20,460 Non era vero quando la C-shell è stato creato, ma si è sviluppato in questo modo. 282 00:19:20,460 --> 00:19:26,560 Si potrebbe notare qui che tutti questi nomi shell fatta eccezione per la shell Bourne 283 00:19:26,560 --> 00:19:30,640 avere qualcosa a indicare quali shell sono - csh, bash - 284 00:19:30,640 --> 00:19:32,550 ma la Bourne shell è solo sh. 285 00:19:32,550 --> 00:19:34,910 Perché? Questo era il guscio originale. 286 00:19:34,910 --> 00:19:37,770 E 'stata la shell allora, non una shell, 287 00:19:37,770 --> 00:19:41,090 e dato che era il guscio, non c'era motivo per distinguerla da un'altra shell. 288 00:19:41,090 --> 00:19:45,030 Allora è per questo che ha quel nome e ancora lo fa. 289 00:19:50,630 --> 00:19:58,990 >> Questo top ecco una linea da un database di password di un account lì ho 290 00:19:58,990 --> 00:20:01,680 su un altro computer. 291 00:20:01,680 --> 00:20:08,300 Io vado a cercare di ottenere quel nome così potete vedere che parte alla fine, il guscio. 292 00:20:09,720 --> 00:20:15,450 Il database delle password contiene le caratteristiche di accesso per tutti gli utenti. 293 00:20:15,450 --> 00:20:20,330 All'inizio è il nome utente, che potete vedere le ultime 2 lettere di mio momento. 294 00:20:20,330 --> 00:20:23,970 I campi qui sono separati da due punti. 295 00:20:23,970 --> 00:20:28,210 L'ultimo campo, come potete vedere, è bin / tcsh, la shell. 296 00:20:28,210 --> 00:20:30,230 Questo è l'identificatore shell. 297 00:20:30,230 --> 00:20:33,240 C'è qualcosa di interessante qui. 298 00:20:33,240 --> 00:20:36,950 Quando Unix è stato sviluppato, c'era solo 1 shell, 299 00:20:36,950 --> 00:20:38,350 quindi non c'era scelta lì. 300 00:20:38,350 --> 00:20:45,570 Allora perché permettono un campo del database delle password per specificare una shell? 301 00:20:45,570 --> 00:20:47,920 Non lo so, ma è una fortuna che hanno fatto. 302 00:20:47,920 --> 00:20:52,030 E 'piuttosto difficile fare cambiamenti nel formato database delle password 303 00:20:52,030 --> 00:20:54,420 perché molti programmi si riferiscono al suo formato 304 00:20:54,420 --> 00:20:57,720 e avrebbe dovuto essere riscritto. 305 00:20:57,720 --> 00:21:04,130 Si tratta di uno sviluppo felice o fortuito che hanno incluso quel campo. 306 00:21:04,130 --> 00:21:12,780 Questo tipo di una linea di file di password viene utilizzato su tutti i computer Unix e Linux per quanto ne so. 307 00:21:12,780 --> 00:21:14,650 Il Mac ha il suo sistema. 308 00:21:14,650 --> 00:21:17,810 In realtà ha un file di password con le linee in quel formato, 309 00:21:17,810 --> 00:21:21,060 ma che non è dove sono definite le caratteristiche degli utenti. 310 00:21:21,060 --> 00:21:24,200 Un'altra osservazione parentesi lì. 311 00:21:36,470 --> 00:21:46,020 >> Se stai chiamando una shell, si può chiamare come sub-shell dei vostri conchiglie esistenti. 312 00:21:46,020 --> 00:21:50,480 Quindi, se vado qui, Liberiamoci di queste cose. 313 00:21:50,480 --> 00:21:53,350 Eccomi nel C-shell. 314 00:21:56,830 --> 00:22:01,200 Tale variabile, che identifica con precisione il mio guscio, 315 00:22:01,200 --> 00:22:04,300 in realtà non è sempre un modo affidabile per determinare che cosa shell si sta eseguendo, 316 00:22:04,300 --> 00:22:06,220 ma in questo caso è. 317 00:22:06,220 --> 00:22:08,040 Cosa succede se ho appena digito - 318 00:22:09,970 --> 00:22:12,470 Ora sono in Bash. 319 00:22:12,470 --> 00:22:19,540 Alcune cose stanno per essere lo stesso. ls mi dice i miei comandi. 320 00:22:19,540 --> 00:22:24,500 Se faccio un sospendo di nuovo al mio C-shell, ls stessa. Giusto? 321 00:22:24,500 --> 00:22:28,890 fg, primo piano, di nuovo alla mia shell Bash. 322 00:22:28,890 --> 00:22:38,290 pwd, directory corrente, di nuovo al C-shell. 323 00:22:38,290 --> 00:22:43,180 pwd, diversa directory - in realtà non è una directory diversa in questo caso. 324 00:22:43,180 --> 00:22:45,110 E 'la stessa directory. 325 00:22:45,110 --> 00:22:50,000 Diciamo che voglio chiamare un comando qui: dove ls. 326 00:22:50,000 --> 00:22:52,140 Che cosa fare? 327 00:22:52,140 --> 00:22:53,670 Mi dice dove il comando ls 328 00:22:53,670 --> 00:22:56,670 quello che mi dà un elenco di directory, si trova a ls. 329 00:22:56,670 --> 00:23:01,460 Torniamo alla shell Bash. Proviamo la stessa cosa. 330 00:23:01,460 --> 00:23:05,830 Hmm, interessante là dove: command not found. 331 00:23:05,830 --> 00:23:07,400 Perché è così? 332 00:23:07,400 --> 00:23:11,570 Il cui comando è costruito dentro al C-shell. 333 00:23:11,570 --> 00:23:15,630 Questo non è un comando che deve essere letta in memoria da qualche altra parte ed eseguito. 334 00:23:15,630 --> 00:23:20,310 Il C-shell gestisce trasferendo l'esecuzione a una parte del proprio codice 335 00:23:20,310 --> 00:23:22,790 e non è la shell Bash. 336 00:23:22,790 --> 00:23:25,710 Quindi Bash, non avendo un tale comando built-in, lo cerca, non lo trova, 337 00:23:25,710 --> 00:23:27,720 e otteniamo un errore. 338 00:23:27,720 --> 00:23:32,290 Così ci abbiamo Bash shell in esecuzione con un C-shell, e chiediamo che un sub-shell. 339 00:23:32,290 --> 00:23:38,480 E solo nel caso foste curiosi, shell Bash ha il suo modo di localizzare comandi. 340 00:23:38,480 --> 00:23:42,590 hash si riferisce al fatto che può essere eseguito più rapidamente, 341 00:23:42,590 --> 00:23:44,960 essere trovati più rapidamente. 342 00:23:44,960 --> 00:23:48,610 Questo è uno dei miglioramenti incorporati in alcune di queste conchiglie. 343 00:23:50,220 --> 00:23:54,200 >> Bourne tipo gusci sono da preferire per la programmazione. 344 00:23:54,200 --> 00:23:57,300 Hanno strutture di controllo come i cicli, istruzioni condizionali, 345 00:23:57,300 --> 00:24:00,240 il tipo di comandi che è possibile utilizzare in linguaggi di programmazione come C 346 00:24:00,240 --> 00:24:04,190 o qualunque linguaggio. Forse stai programmando in Java o qualsiasi altra cosa. 347 00:24:04,190 --> 00:24:06,460 I serbatoi sono quelli troppo. 348 00:24:06,460 --> 00:24:11,790 Le Bourne tipo conchiglie, in particolare Bash, hanno più 349 00:24:11,790 --> 00:24:15,730 e sono progettati con una maggiore flessibilità. 350 00:24:15,730 --> 00:24:20,700 La shell Bash ha matrici. L'originale Bourne shell non lo fa. 351 00:24:20,700 --> 00:24:26,130 Di modo che può essere notevolmente vantaggiosa per la programmazione. 352 00:24:26,130 --> 00:24:29,810 Il C-shell fa effettivamente array, ma non hanno un sacco di queste altre caratteristiche. 353 00:24:29,810 --> 00:24:33,450 Le shell di tipo Bourne verranno eseguiti più velocemente 354 00:24:33,450 --> 00:24:36,520 se non hanno le caratteristiche previste per uso interattivo. 355 00:24:36,520 --> 00:24:39,340 Si carica le cose per uno scopo e questo li carica giù per un altro scopo. 356 00:24:39,340 --> 00:24:41,520 C'è quel trade-off lì. 357 00:24:41,520 --> 00:24:44,510 Quelle caratteristiche che sono destinati per l'uso interattivo 358 00:24:44,510 --> 00:24:46,920 sono davvero di poca o nessuna utilità per lo scripting. 359 00:24:46,920 --> 00:24:52,160 E 'possibile utilizzare un sub-shell interattiva proprio come quella che ho cominciato lì 360 00:24:52,160 --> 00:24:57,780 per testare i comandi che si intende utilizzare in uno script. 361 00:24:57,780 --> 00:25:01,180 Questo è ciò che non si può fare con perl. Puoi farlo con le conchiglie. 362 00:25:01,180 --> 00:25:04,850 Anche le strutture come per i loop e così via possono essere eseguiti in modo interattivo. 363 00:25:04,850 --> 00:25:07,000 Essi sono a volte utili per eseguire in modo interattivo, 364 00:25:07,000 --> 00:25:10,180 ma più probabilmente si sta usando per sviluppare uno script. 365 00:25:15,690 --> 00:25:17,400 >> Alias. 366 00:25:17,400 --> 00:25:21,630 Questo sta per essere circa la C-shell. 367 00:25:23,270 --> 00:25:27,570 Meccanismo di Storia dove si arriva di nuovo ai comandi precedenti 368 00:25:27,570 --> 00:25:30,340 o parti di esse che hai già eseguito. 369 00:25:30,340 --> 00:25:33,680 Anche in questo caso, circa la C-shell, la shell Bourne e Korn shell hanno queste cose, 370 00:25:33,680 --> 00:25:35,620 ma io non ho intenzione di entrare in loro. 371 00:25:35,620 --> 00:25:40,340 Così qui sono alcuni alias utili che ho. 372 00:25:43,100 --> 00:25:44,880 Invece di digitare ls - è un comando comune - 373 00:25:44,880 --> 00:25:47,620 basta digitare l e risparmiare 1 carattere. 374 00:25:47,620 --> 00:25:50,600 ls con diverse opzioni, tutte quelle di lavoro. 375 00:25:50,600 --> 00:25:54,460 Si noti che queste definizioni hanno quotazioni intorno a loro. 376 00:25:54,460 --> 00:25:57,520 In questi casi, le virgolette non sono necessarie. 377 00:25:57,520 --> 00:26:00,100 Se si può definire tali alias senza virgolette, sarebbe ancora funzionare. 378 00:26:00,100 --> 00:26:02,910 Sono consigliate. 379 00:26:02,910 --> 00:26:04,900 Ci sono situazioni in cui non è possibile utilizzare il prezzo 380 00:26:04,900 --> 00:26:08,050 perché si vuole che accada qualcosa che la citazione impedirebbe. 381 00:26:08,050 --> 00:26:11,210 A volte si può citare una parte della definizione, ma non tutto. 382 00:26:11,210 --> 00:26:17,010 E 'anche generalmente raccomandato di utilizzare le virgolette singole, piuttosto che doppi apici. 383 00:26:17,010 --> 00:26:19,750 Le virgolette doppie hanno effetti sulle definizioni di variabili, 384 00:26:19,750 --> 00:26:22,950 particolare causando loro da valutare anziché fermarlo. 385 00:26:22,950 --> 00:26:25,910 Perché vorremmo fermare la valutazione? 386 00:26:25,910 --> 00:26:28,710 E come le citazioni fanno per noi? 387 00:26:28,710 --> 00:26:32,600 >> Qui è un comando che si potrebbe trovare interessante. 388 00:26:32,600 --> 00:26:35,470 'Ls g *' 389 00:26:35,470 --> 00:26:37,640 g *, come probabilmente sapete, è un'espressione jolly 390 00:26:37,640 --> 00:26:40,290 per tutti i nomi di file che iniziano con g. 391 00:26:40,290 --> 00:26:46,410 Se ho solo scrivere in un comando ls g *, vado a prendere una lista di tutti quei nomi nella mia directory corrente. 392 00:26:46,410 --> 00:26:50,870 Se io definisco che alias è qui con le virgolette, 393 00:26:50,870 --> 00:26:56,990 verrà eseguito quel comando nella directory corrente in cui si sta eseguendo esso. 394 00:26:56,990 --> 00:27:01,250 Ma se si esegue la definizione dell'alias senza le virgolette, 395 00:27:01,250 --> 00:27:09,620 valuterà il carattere jolly * g quando viene eseguito questo comando di definizione. 396 00:27:09,620 --> 00:27:14,400 Così la definizione dell'alias sarà ls seguito l'elenco dei file nella directory 397 00:27:14,400 --> 00:27:16,310 in cui viene eseguito il comando alias, 398 00:27:16,310 --> 00:27:19,180 indipendentemente da dove realmente intenzione di eseguire il comando. 399 00:27:19,180 --> 00:27:26,360 Questo non è di grande utilità, e gli apici prevenire la valutazione della asterisco. 400 00:27:26,360 --> 00:27:30,780 Quindi basta avere la definizione dell'essere LS g *. 401 00:27:30,780 --> 00:27:35,510 Poi, quando si esegue l'alias, lgs, poi mette che fuori. 402 00:27:35,510 --> 00:27:40,490 Ora non ci sono citazioni, e valuteranno l'asterisco quando si esegue il comando alias. 403 00:27:40,490 --> 00:27:43,900 Ecco, questo è una cosa. 404 00:27:43,900 --> 00:27:46,590 Virgolette doppie avrebbero lo stesso effetto qui, 405 00:27:46,590 --> 00:27:50,580 ma ci sono altri casi in cui virgolette non avrebbe funzionato così bene. 406 00:27:50,580 --> 00:27:52,450 >> Qui è un altro. 407 00:27:52,450 --> 00:27:54,270 Si potrebbe sapere il comando grep. 408 00:27:54,270 --> 00:28:02,110 Il comando grep può essere utilizzato per eseguire la scansione di un file per le linee che hanno determinate stringhe. 409 00:28:02,110 --> 00:28:10,350 Allora andiamo qui e io uscire dal mio guscio Bourne. 410 00:28:23,570 --> 00:28:25,450 Ok. Ecco un file. 411 00:28:25,450 --> 00:28:31,490 Diciamo che si tratta di stringhe abc grep. Eccolo. 412 00:28:31,490 --> 00:28:37,930 Se faccio zddd grep, non ottengo niente. Ok. 413 00:28:37,930 --> 00:28:40,960 Così si trova una stringa, riferisce, non lo trova, non segnalarlo. 414 00:28:40,960 --> 00:28:44,930 Produce ogni riga che ha quella stringa su di esso. 415 00:28:44,930 --> 00:28:49,080 Ci sono tutti i tipi di opzioni qui che potete trovare nella documentazione. 416 00:28:49,080 --> 00:28:52,160 Ecco un modo per farlo. 417 00:28:52,160 --> 00:29:03,290 Che dire di questo, alias grabc 'grep abc'? 418 00:29:03,290 --> 00:29:09,000 Che sta per includere 1 argomento quando l'alias è definito. 419 00:29:09,000 --> 00:29:26,300 Quindi, se lo faccio qui, ora se faccio grabc, 420 00:29:26,300 --> 00:29:30,620 ora l'alias comprende oltre il semplice comando. Essa ha anche l'argomento. 421 00:29:30,620 --> 00:29:32,190 Finora funziona. 422 00:29:32,190 --> 00:29:38,590 Ho un altro comando qui, questo, quindi quelli sono diverse stringhe in là 423 00:29:38,590 --> 00:29:46,790 e dimostrano che questa non trova niente lì perché non corrisponde. 424 00:29:46,790 --> 00:29:56,180 >> Cosa succede se voglio includere nella definizione alias del file che ho intenzione di cercare 425 00:29:56,180 --> 00:30:02,970 e voglio dare come argomento per l'alias la stringa che sto cercando? 426 00:30:02,970 --> 00:30:08,040 Potrei voler dire abc come argomento al mio alias, 427 00:30:08,040 --> 00:30:10,870 ma l'alias già determinato file. 428 00:30:10,870 --> 00:30:15,710 Ed è qui che entra in gioco questa espressione 429 00:30:20,430 --> 00:30:25,270 Notate qui abbiamo grep come prima. 430 00:30:25,270 --> 00:30:28,130 Abbiamo qui il file, stringhe. 431 00:30:28,130 --> 00:30:35,610 \! ^, Una specie di strana espressione, suppongo, se non avete visto prima. 432 00:30:35,610 --> 00:30:39,920 Punto esclamativo è parte del meccanismo storia C-shell. 433 00:30:39,920 --> 00:30:45,220 Può richiamare comandi precedenti, può richiamare argomenti per i comandi e così via. 434 00:30:46,760 --> 00:31:01,570 Il meccanismo storia viene utilizzato come parte di aliasing. 435 00:31:01,570 --> 00:31:07,390 Se si specifica una riga dopo il punto esclamativo, si farà riferimento a quella linea nella lista della storia, 436 00:31:07,390 --> 00:31:11,910 che non saremo ottenendo in ora visto che è tutto un altro argomento. 437 00:31:11,910 --> 00:31:16,280 È possibile specificare una parte di una linea. 438 00:31:16,280 --> 00:31:22,950 Così! 03:02 sarebbe il secondo argomento del numero di comando 3. 439 00:31:22,950 --> 00:31:30,430 L'accento circonflesso qui, in questa espressione rappresenta il primo argomento. 440 00:31:30,430 --> 00:31:34,410 Se non si dà una indicazione di quale comando ti riferisci, 441 00:31:34,410 --> 00:31:37,300 si riferisce al comando immediatamente precedente, 442 00:31:37,300 --> 00:31:41,990 e il cursore è un simbolo per il primo argomento. 443 00:31:41,990 --> 00:31:46,820 Perché è il cursore e non il numero, non è necessario utilizzare il colon, 444 00:31:46,820 --> 00:31:52,660 così! ^ significa che il primo argomento del comando precedente. 445 00:31:52,660 --> 00:31:55,020 Un po 'confusi qui. 446 00:31:55,020 --> 00:31:58,450 In questo caso, quando si utilizza questo come una definizione di alias, 447 00:31:58,450 --> 00:32:04,650 il riferimento storico rimanda ai comandi in cui viene utilizzato l'alias. 448 00:32:04,650 --> 00:32:08,470 Quindi questo sta andando indietro 1 comando come un'operazione di storia, 449 00:32:08,470 --> 00:32:11,810 ma come un'operazione alias si riferisce al comando in cui si digiterà, 450 00:32:11,810 --> 00:32:14,780 dire, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Abbiamo le citazioni qui in esso. Qual è il backslash per? 452 00:32:20,240 --> 00:32:30,810 In questo caso, come altrove, non vogliamo eseguire il meccanismo storia 453 00:32:30,810 --> 00:32:33,680 definendo l'alias. 454 00:32:33,680 --> 00:32:37,900 Se non avessimo il backslash lì, la shell tirava nel primo argomento 455 00:32:37,900 --> 00:32:41,870 del comando a destra prima si correva il comando alias, che non vogliamo. 456 00:32:41,870 --> 00:32:47,520 Vogliamo che questo sia costruito al comando alias per chiamare in un argomento più tardi. 457 00:32:47,520 --> 00:32:53,550 Apici singoli non sfuggono un punto esclamativo, il riferimento storico. 458 00:32:53,550 --> 00:32:57,450 Forse lei sa la fuga espressione significa cambiare il significato di qualcosa. 459 00:32:57,450 --> 00:33:00,260 In questo caso, significa fermare qualcosa da avere un significato speciale. 460 00:33:00,260 --> 00:33:03,030 Significato speciale del punto esclamativo è storia. 461 00:33:03,030 --> 00:33:05,790 Fuga e non avere quel significato. 462 00:33:05,790 --> 00:33:08,080 Quotazioni non lo fanno; backslash fa. 463 00:33:08,080 --> 00:33:11,900 Quindi stiamo in realtà con 2 livelli di sfuggire qui. 464 00:33:23,500 --> 00:33:29,620 Ho intenzione di spostare questo comando in altra finestra senza digitandola 465 00:33:29,620 --> 00:33:35,210 utilizzando queste operazioni di modifica, che si possono trovare utili. 466 00:33:40,620 --> 00:33:42,460 Un'altra cosa qui ti faccio vedere. 467 00:33:42,460 --> 00:33:46,730 Se basta digitare alias senza argomenti, ti dice tutti i tuoi argomenti. 468 00:33:46,730 --> 00:33:48,640 Si tratta di una serie di alias ho già avuto qui 469 00:33:48,640 --> 00:33:53,400 oltre a quelli che ho utilizzato qui oggi. 470 00:33:53,400 --> 00:34:00,220 Ma se ho appena Type con il nome di un alias, mi dice che cosa significa. 471 00:34:00,220 --> 00:34:03,390 Si noti che le citazioni sono andati e il backslash è andato. 472 00:34:03,390 --> 00:34:08,620 Questa stringa qui è il risultato di tale definizione alias, 473 00:34:08,620 --> 00:34:12,199 e ora ha solo! ^ in esso. 474 00:34:12,199 --> 00:34:19,150 Questo sta a guardare nelle corde di file per nulla. 475 00:34:19,150 --> 00:34:34,900 Quindi se faccio stringhe grstrings_file, io non ho dato nulla per cercare lì, 476 00:34:34,900 --> 00:34:37,429 ma che sta cercando in stringhe. 477 00:34:37,429 --> 00:34:42,330 Esso non ha trovato la parola stringhe nelle stringhe di file, ma non trova abc. 478 00:34:42,330 --> 00:34:46,770 E non ritiene che. 479 00:34:46,770 --> 00:34:52,330 Così qui stiamo dando un argomento che colpisce nella definizione di alias, 480 00:34:52,330 --> 00:34:55,530 che viene inserito in esso. 481 00:34:55,530 --> 00:34:58,540 È il luogo dove questa espressione viene. 482 00:34:58,540 --> 00:35:00,240 È possibile utilizzare più di 1. 483 00:35:00,240 --> 00:35:03,170 Il cursore è un simbolo per il primo argomento. 484 00:35:03,170 --> 00:35:07,510 Se si volesse utilizzare un secondo argomento, si dovrebbe quindi dire: 2. 485 00:35:07,510 --> 00:35:11,250 Non c'è nessun simbolo speciale per il secondo argomento. 486 00:35:11,250 --> 00:35:14,790 E perché si sta utilizzando un numero, si dovrebbe usare il colon. 487 00:35:14,790 --> 00:35:17,220 Vi è, tuttavia, un'altra scelta qui. 488 00:35:17,220 --> 00:35:21,220 Il segno del dollaro rappresenta l'ultimo argomento. 489 00:35:21,220 --> 00:35:23,320 E perché questo è un simbolo, è possibile omettere il colon. 490 00:35:23,320 --> 00:35:25,870 Quindi sarebbe l'ultimo argomento della lista. 491 00:35:25,870 --> 00:35:27,900 E c'è anche quello. 492 00:35:27,900 --> 00:35:31,380 Asterisk vuol dire tutto, quindi questo è l'elenco di argomenti completo, 493 00:35:31,380 --> 00:35:35,150 e ancora, è possibile omettere i due punti perché non è un numero. 494 00:35:36,970 --> 00:35:39,950 Spero che tu stia tutto osservando tutto questo. 495 00:35:39,950 --> 00:35:54,100 >> Il meccanismo storia può tornare a righe precedenti nella lista della storia. 496 00:35:54,100 --> 00:36:01,370 Si potrebbe fare questo in una definizione di alias. 497 00:36:01,370 --> 00:36:02,950 Non ho mai visto questo fatto. 498 00:36:02,950 --> 00:36:05,840 Essa avrebbe l'effetto di tirare i comandi precedenti dalla lista della storia 499 00:36:05,840 --> 00:36:08,130 quando si esegue l'alias, che potrebbero essere diversi comandi 500 00:36:08,130 --> 00:36:11,240 a seconda di quando e dove lo si esegue. 501 00:36:11,240 --> 00:36:14,020 In teoria si potrebbe desiderare di tirare fuori un siffatto riferimento 502 00:36:14,020 --> 00:36:15,900 solo sapere che cosa un comando precedente è stato. 503 00:36:15,900 --> 00:36:17,280 Non ho mai visto questo accadere. 504 00:36:17,280 --> 00:36:19,970 Suppongo che qualcuno potrebbe desiderare, ma questo è molto improbabile. 505 00:36:19,970 --> 00:36:26,480 C'è un'altra cosa qui. 506 00:36:26,480 --> 00:36:33,060 Se si utilizza il riferimento storico-tipo, 507 00:36:33,060 --> 00:36:38,190 poi vengono utilizzati solo gli argomenti per i quali esiste un siffatto riferimento. 508 00:36:38,190 --> 00:36:42,180 Se si dispone di una definizione di alias che non utilizza un riferimento di storia-tipo, 509 00:36:42,180 --> 00:36:44,060 se diventa solo l'inizio del comando 510 00:36:44,060 --> 00:36:46,520 e si dispone di ulteriori argomentazioni, quindi tutto quello che scrivi dopo che 511 00:36:46,520 --> 00:36:48,450 sarà aggiunto al comando. 512 00:36:48,450 --> 00:36:52,040 In questo caso, l'esempio che ho appena dato lì, abbiamo usato il primo argomento; 513 00:36:52,040 --> 00:36:54,610 non abbiamo usato tutti gli altri. 514 00:36:54,610 --> 00:36:57,960 Se altri argomenti erano stati dati sulla riga di comando, essi non sarebbero stati utilizzati. 515 00:36:57,960 --> 00:37:04,630 Quindi, se si utilizza il riferimento di storia a tutti, quindi è necessario utilizzare per ottenere un qualsiasi argomento. 516 00:37:04,630 --> 00:37:11,310 >> C'è un'altra cosa che qui voglio solo accennare, in parte tra parentesi, 517 00:37:11,310 --> 00:37:15,250 vale a dire che questo meccanismo storia con il punto esclamativo 518 00:37:15,250 --> 00:37:18,010 risale al C-shell originale. 519 00:37:18,010 --> 00:37:27,060 La tcsh ha introdotto operazioni storia 520 00:37:27,060 --> 00:37:30,910 che utilizzano i tipi di comandi e stringhe da redattori, 521 00:37:30,910 --> 00:37:33,650 sia Emacs o vi. 522 00:37:33,650 --> 00:37:36,430 La mia opinione personale è Emacs è molto più facile da utilizzare per questo scopo 523 00:37:36,430 --> 00:37:39,390 anche se si utilizza vi per l'editing normale. 524 00:37:39,390 --> 00:37:43,900 Ci sono vari comandi Emacs che ora sono adattate per la storia. 525 00:37:43,900 --> 00:37:46,410 Controllo P ottiene la riga precedente nella lista della storia. 526 00:37:46,410 --> 00:37:48,840 Un altro controllo P otterrà quello prima. 527 00:37:48,840 --> 00:37:50,540 La freccia in su fa la stessa cosa. 528 00:37:50,540 --> 00:37:54,190 Controllo N ottiene il comando successivo se hai già scorso in indietro qualche modo. 529 00:37:54,190 --> 00:37:55,880 Freccia verso il basso lo fa troppo. 530 00:37:55,880 --> 00:38:00,480 È possibile spostare da sinistra a destra con le frecce e varie altre cose. 531 00:38:00,480 --> 00:38:02,390 Questo può avvalersi del meccanismo di storia 532 00:38:02,390 --> 00:38:05,070 molto più facile che utilizzando la sintassi punto esclamativo, 533 00:38:05,070 --> 00:38:07,930 ma non si userebbe che in una definizione di alias. 534 00:38:17,780 --> 00:38:20,020 Andremo oltre che qualche altra volta. 535 00:38:24,300 --> 00:38:25,810 >> Variabili. 536 00:38:26,880 --> 00:38:29,510 Sai cosa sono le variabili nei linguaggi di programmazione. 537 00:38:29,510 --> 00:38:31,680 I gusci li hanno. 538 00:38:31,680 --> 00:38:37,350 Il C-shell utilizza il comando set per assegnare le variabili, 539 00:38:37,350 --> 00:38:41,360 così che imposta la variabile a al valore di b - 540 00:38:41,360 --> 00:38:46,390 come ho detto, una definizione inutile, ma un esempio di come questo viene utilizzato. 541 00:38:48,790 --> 00:38:52,410 Il comando set creerà una variabile, se non esiste già. 542 00:38:55,270 --> 00:39:02,490 I parametri posizionali per script di shell possono essere considerate variabili, 543 00:39:02,490 --> 00:39:10,750 ma il loro uso e le regole per loro sono un po 'diverso. 544 00:39:10,750 --> 00:39:14,320 Non è possibile assegnare un valore a $ 1 nel corso di uno script. 545 00:39:14,320 --> 00:39:18,340 Si dovrà definire una nuova variabile a tal fine, se qualcuno di voi volevano. 546 00:39:23,000 --> 00:39:28,470 Digitare set senza argomenti e si ottiene una lista di tutte le variabili attualmente definite. 547 00:39:28,470 --> 00:39:34,220 E veniamo al mio altre shell qui e vediamo cosa otteniamo se lo facciamo. 548 00:39:34,220 --> 00:39:37,110 Piuttosto un lungo elenco, giusto? 549 00:39:37,110 --> 00:39:40,990 Scorrere verso l'alto un po '. Guardate tutto questo. 550 00:39:40,990 --> 00:39:44,330 Alcune di queste cose sono definite automaticamente dalla shell. 551 00:39:44,330 --> 00:39:49,320 La shell crea la variabile e gli dà un valore. 552 00:39:49,320 --> 00:39:52,730 Alcuni di essi sono definiti dalla shell ma poi ridefinito dall'utente 553 00:39:52,730 --> 00:39:54,820 secondo le sue preferenze. 554 00:39:54,820 --> 00:39:59,110 E alcuni di loro sono creati dall'utente a seconda di quello che sta facendo quel giorno. 555 00:39:59,110 --> 00:40:01,880 Questo è solo impostato senza argomenti. 556 00:40:06,920 --> 00:40:10,050 C'è una caratteristica strana qui di questa cosa. 557 00:40:10,050 --> 00:40:17,980 Ci devono essere sia nessuno spazio tra il segno di uguale e il nome della variabile 558 00:40:17,980 --> 00:40:23,700 e il valore o spazi su entrambi i lati del segno uguale, 559 00:40:23,700 --> 00:40:28,940 come in questo. 560 00:40:35,620 --> 00:40:41,340 Questo non funziona, e questo in realtà è un comando valido 561 00:40:41,340 --> 00:40:43,390 ma non farà che cosa si intende. 562 00:40:43,390 --> 00:40:50,070 Questo comando funziona perché se hai appena detto di impostare e un nome di variabile 563 00:40:50,070 --> 00:40:54,890 senza segno di uguale o impostare e un nome di variabile con un segno di uguale e nessun valore, 564 00:40:54,890 --> 00:40:57,770 sarà impostare la variabile su un valore null. 565 00:40:57,770 --> 00:41:00,120 Così set a = è un comando valido. 566 00:41:00,120 --> 00:41:04,370 Il comando set può definire più di 1 variabile sulla stessa linea. 567 00:41:04,370 --> 00:41:11,240 Quindi questo comando qui ha l'effetto di definire sia a e b valori null. 568 00:41:11,240 --> 00:41:13,470 Probabilmente non è quello che vuoi. 569 00:41:13,470 --> 00:41:17,940 Questo qui, menzionato in precedenza, porterà ad un errore 570 00:41:17,940 --> 00:41:21,270 perché = b non è un'espressione valida. 571 00:41:21,270 --> 00:41:23,680 Un nome di variabile non può iniziare con il segno di uguale. 572 00:41:26,760 --> 00:41:29,080 E ci sono queste altre cose qui. 573 00:41:29,080 --> 00:41:36,820 I due punti sono stati utilizzati per selezionare gli argomenti da linee di storia, 574 00:41:36,820 --> 00:41:41,210 e possono essere utilizzati - e io non andare in prima - per modificare le cose. 575 00:41:41,210 --> 00:41:44,480 Possono anche essere utilizzati per modificare le variabili di shell. 576 00:41:44,480 --> 00:41:49,050 Questo qui, $ a, ha un valore. 577 00:41:49,050 --> 00:41:55,040 : R decollerà un'estensione. 578 00:41:55,040 --> 00:41:57,200 Una proroga sarà nulla in seguito a un punto, 579 00:41:57,200 --> 00:41:59,200 un punto e niente seguente alla fine di un file, 580 00:41:59,200 --> 00:42:03,230 solo alla fine della lista dopo l'ultima barra. 581 00:42:03,230 --> 00:42:05,480 Così ho qui. 582 00:42:05,480 --> 00:42:10,730 a è che. Si scenderà il. O. 583 00:42:10,730 --> 00:42:16,510 Se non c'è estensione, solo i percorsi dopo l'ultima barra, non avrà alcun effetto. 584 00:42:16,510 --> 00:42:27,480 a: h, che espressione variabile, si toglie l'ultimo elemento di una lista di directory, 585 00:42:27,480 --> 00:42:29,660 ancora una volta, solo dopo l'ultima barra. 586 00:42:29,660 --> 00:42:33,160 Quindi / a / b / c diventa / a / b, 587 00:42:33,160 --> 00:42:38,870 ma questo è cambiato perché l'elemento dopo l'elenco è nullo. 588 00:42:38,870 --> 00:42:43,070 Qui c'è qualcosa che anche io voglio sottolineare. 589 00:42:43,070 --> 00:42:46,770 Queste qualificazioni non cercano l'esistenza di questi file. 590 00:42:46,770 --> 00:42:48,910 Sembrano appena per le stringhe. 591 00:42:48,910 --> 00:42:54,520 Questi hanno lo scopo di manipolare i nomi di file, nomi di percorso, 592 00:42:54,520 --> 00:42:57,520 ma possono essere utilizzati su qualsiasi stringa, anche se non è un nome di file. 593 00:42:57,520 --> 00:42:58,920 E loro non guardano per l'esistenza, 594 00:42:58,920 --> 00:43:03,550 quindi se non c'è tale file, / a / b / c, questo continuerà a funzionare. 595 00:43:03,550 --> 00:43:06,930 Sia che si tratti di qualche utilità è un'altra questione, ma continuerà a funzionare. 596 00:43:06,930 --> 00:43:12,850 Le variabili sono diverse shell Bourne. Ci arriveremo più avanti. 597 00:43:12,850 --> 00:43:18,240 Segno del dollaro può essere sfuggito come il punto esclamativo e l'asterisco. 598 00:43:18,240 --> 00:43:21,760 Segno del dollaro può essere sfuggito con un backslash o le virgolette singole. 599 00:43:21,760 --> 00:43:24,790 Virgolette doppie hanno l'effetto strano in tutte le shell 600 00:43:24,790 --> 00:43:28,690 di forzare la valutazione di un dollaro segno espressione variabile. 601 00:43:28,690 --> 00:43:31,960 Quindi, se si tratta di essere sfuggito a senso unico, le virgolette doppie possono avere l'effetto 602 00:43:31,960 --> 00:43:34,380 di farla valutare comunque. 603 00:43:34,380 --> 00:43:37,090 Questo è un po 'di confusione. 604 00:43:37,090 --> 00:43:43,740 Se ci sono più livelli di fuga, come apici all'interno di doppi apici 605 00:43:43,740 --> 00:43:46,770 o doppi apici all'interno virgolette singole, si dovrebbe provare a vedere cosa accadrà 606 00:43:46,770 --> 00:43:49,520 a una variabile se si sta utilizzando uno. 607 00:43:49,520 --> 00:43:53,410 Quei due situazioni - doppia all'interno di un singolo, unico all'interno della doppia - 608 00:43:53,410 --> 00:43:55,980 non necessariamente vi darà lo stesso risultato. 609 00:44:02,520 --> 00:44:05,600 Le variabili di ambiente, legati variabili C-shell. 610 00:44:05,600 --> 00:44:08,340 Le variabili d'ambiente sono variabili nel C-shell, 611 00:44:08,340 --> 00:44:11,250 e sono anche le variabili in altre shell troppo. 612 00:44:11,250 --> 00:44:15,230 Nel C-shell, sono insiemi distinti. 613 00:44:15,230 --> 00:44:18,130 Le cose che dicevo prima sono circa variabili di shell. 614 00:44:18,130 --> 00:44:21,300 Le variabili d'ambiente sono una serie distinta di variabili 615 00:44:21,300 --> 00:44:28,650 con l'eccezione di diverse variabili che chiamiamo variabili vincolate, 616 00:44:28,650 --> 00:44:30,640 che sono molto importanti e ci arriveremo in quelli più tardi. 617 00:44:30,640 --> 00:44:34,950 Le variabili di ambiente vengono passate automaticamente 618 00:44:34,950 --> 00:44:41,800 di conchiglie o comandi eseguiti dalla shell. 619 00:44:41,800 --> 00:44:46,220 Le altre cose non sono. Le variabili di shell, gli alias non sono. Le variabili di ambiente sono. 620 00:44:46,220 --> 00:44:48,630 Ecco perché noi li chiamiamo variabili di ambiente, 621 00:44:48,630 --> 00:44:55,030 l'idea è che l'ambiente si estende oltre appena shell corrente. 622 00:44:55,030 --> 00:45:00,510 Essi possono essere utilizzati per definire impostazioni per i comandi. 623 00:45:00,510 --> 00:45:05,470 Ecco un esempio. STAMPANTE, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Entrambe queste variabili può definire una stampante che un comando verrà utilizzato per stampare le cose. 625 00:45:12,270 --> 00:45:16,500 Se si dispone di più stampanti in giro, si potrebbe desiderare di mettere quello che ti piace. 626 00:45:16,500 --> 00:45:21,320 La ragione per cui abbiamo 2 variabili è che diversi set di comandi sono stati scritti 627 00:45:21,320 --> 00:45:23,870 utilizzando queste diverse variabili. 628 00:45:23,870 --> 00:45:25,910 Si potrebbe dare loro valori diversi. 629 00:45:25,910 --> 00:45:28,860 Molto probabilmente si darà loro sia lo stesso valore. 630 00:45:28,860 --> 00:45:35,840 Quelle cose funzionano perché i comandi che fanno la stampa 631 00:45:35,840 --> 00:45:40,740 sono stati programmati per esaminare i valori di queste variabili. 632 00:45:42,200 --> 00:45:46,150 Se un programma non sono stati scritti in questo modo, se fosse stato scritto per fare qualcosa di diverso, 633 00:45:46,150 --> 00:45:48,280 la variabile sarebbe irrilevante. 634 00:45:48,280 --> 00:45:52,530 Così il sistema operativo non è in cerca di queste variabili 635 00:45:52,530 --> 00:45:55,210 ogni volta che si fa riferimento a una stampante. 636 00:45:55,210 --> 00:45:59,090 Un comando che fa la stampa è alla ricerca di queste variabili se programmato in questo modo. 637 00:46:11,030 --> 00:46:15,240 Queste variabili sono spesso definiti nei file di inizializzazione 638 00:46:15,240 --> 00:46:19,440 ma non necessariamente. 639 00:46:19,440 --> 00:46:21,050 Si possono definire sulla riga di comando. 640 00:46:21,050 --> 00:46:24,090 Essi possono essere definiti in un comando. 641 00:46:24,090 --> 00:46:28,740 Un comando che esegue qualcosa potrebbe avere la propria selezione di variabili - 642 00:46:28,740 --> 00:46:32,390 variabili che sono unici per un particolare pacchetto software, per esempio. 643 00:46:32,390 --> 00:46:36,740 Essi saranno definiti quando si esegue il pacchetto. 644 00:46:39,690 --> 00:46:42,680 Come sono queste variabili passate a un sub-shell? 645 00:46:42,680 --> 00:46:48,210 Quando un sub-shell è scritto, non scrive in quella zona. 646 00:46:48,210 --> 00:46:53,260 L'area del sub-shell che è dedicato alle variabili di ambiente 647 00:46:53,260 --> 00:46:56,450 non è stato scritto da sub-shell, è scritto da copia. 648 00:46:56,450 --> 00:47:00,530 Quando si esegue un comando comune, come ad esempio questi comandi per stampare o qualsiasi altra cosa, 649 00:47:00,530 --> 00:47:03,840 cominciano con la creazione di una nuova shell. 650 00:47:03,840 --> 00:47:06,190 La shell crea una shell e poi sovrascrive parte di esso 651 00:47:06,190 --> 00:47:08,800 con il comando che si sta eseguendo, che è un po 'di confusione, 652 00:47:08,800 --> 00:47:10,740 ma è così che questi comandi ottenere le variabili d'ambiente 653 00:47:10,740 --> 00:47:14,890 che poi riferiscono a seguito. 654 00:47:21,920 --> 00:47:28,010 Il comando qui per definire il setenv variabile. 655 00:47:28,010 --> 00:47:36,470 Ecco come si definisce. Si tratta di tre elementi: setenv, variabile, valore. 656 00:47:36,470 --> 00:47:44,710 Se proprio non SetEnv senza argomenti, cosa si ottiene? 657 00:47:47,220 --> 00:47:48,810 Un elenco di tutte queste variabili. 658 00:47:48,810 --> 00:47:53,190 Di nuovo, è una bella lista lunga e in questo caso, come negli altri, 659 00:47:53,190 --> 00:47:57,320 queste variabili sono definite in gran parte dalla mia operazione di login dalla shell stessa 660 00:47:57,320 --> 00:47:59,740 piuttosto che qualsiasi cosa che ho fatto. 661 00:47:59,740 --> 00:48:03,580 C'è un altro comando qui, printenv. 662 00:48:07,520 --> 00:48:10,340 Che stampa anche l'ambiente. 663 00:48:10,340 --> 00:48:15,240 Notate questa ultima cosa qui, EDITOR = vi. 664 00:48:15,240 --> 00:48:21,120 Che dice che se sto usando qualcosa che richiama un editor 665 00:48:21,120 --> 00:48:25,530 e io non specificare un editor e mi permette la scelta, può darmi vi. 666 00:48:25,530 --> 00:48:37,280 Cosa succede se faccio EDITOR printenv? Mi dice quello che è. 667 00:48:37,280 --> 00:48:41,340 Proprio prima che ci fosse una variabile, MENO. 668 00:48:41,340 --> 00:48:46,040 Queste sono le opzioni di default quando si esegue il comando MENO, 669 00:48:46,040 --> 00:48:49,360 che visualizza i file. 670 00:48:49,360 --> 00:48:55,910 Quindi, se lo faccio, printenv può prendere 1 argomento o 0 argomenti, 671 00:48:55,910 --> 00:48:58,070 non più di 1. 672 00:49:01,800 --> 00:49:05,690 Ci sono anche altri comandi, ma non abbiamo intenzione di entrare in tutto questo oggi. 673 00:49:05,690 --> 00:49:11,010 Ricordate che ci sono stati i modificatori per le variabili di shell come: h, 674 00:49:11,010 --> 00:49:14,350 che cadrà l'ultimo elemento di un percorso, 675 00:49:14,350 --> 00:49:17,950 o: r, che cadrà una proroga. 676 00:49:17,950 --> 00:49:23,110 Quelli che ora si applicano alle variabili di ambiente troppo. Non hanno abituati. 677 00:49:23,110 --> 00:49:24,960 Ha usato essere che non potevano essere modificati. Ora possono essere. 678 00:49:24,960 --> 00:49:29,190 E 'uno dei progressi con gli sviluppi dei gusci nel corso degli anni. 679 00:49:29,190 --> 00:49:35,620 Dicevo che i gusci come parte degli ambienti 680 00:49:35,620 --> 00:49:43,040 e le variabili di shell C-shell sono, con alcune eccezioni, insiemi distinti. 681 00:49:43,040 --> 00:49:46,790 È possibile stabilire una variabile di ambiente e di una variabile di shell con lo stesso nome. 682 00:49:46,790 --> 00:49:49,220 Saranno diverse variabili, possono avere valori diversi. 683 00:49:49,220 --> 00:49:53,090 La modifica del valore di un non cambierà il valore dell'altro. 684 00:49:53,090 --> 00:49:58,070 Queste variabili sono tutte valutate con il simbolo del dollaro - $ a, $ qualunque. 685 00:49:58,070 --> 00:50:02,340 Così che cosa se avete questo? Sapete quale si ottiene? 686 00:50:02,340 --> 00:50:04,520 Nelle mie prove ho avuto la variabile di shell, 687 00:50:04,520 --> 00:50:07,240 ma questo non è documentato e non si può fare affidamento su questo. 688 00:50:07,240 --> 00:50:10,270 Quindi vi chiedo, è la creazione di shell e ambientali variabili 689 00:50:10,270 --> 00:50:13,490 con gli stessi nomi una buona idea? No. Va bene. 690 00:50:13,490 --> 00:50:17,460 Quali sono queste le principali eccezioni in cui le variabili ambiente e shell 691 00:50:17,460 --> 00:50:19,860 sono collegati gli uni agli altri? 692 00:50:19,860 --> 00:50:27,470 Ci sono questi 4. 693 00:50:32,030 --> 00:50:35,510 Capitale lettera variabile d'ambiente TERM, 694 00:50:35,510 --> 00:50:41,540 variabile di shell termine in lettere minuscole, tipo di emulazione di terminale. 695 00:50:41,540 --> 00:50:47,430 Sto solo andando ad andare qui e ho intenzione di fare l'eco, un comando utile qui, 696 00:50:47,430 --> 00:50:52,560 $ Termine TERM $. E lì. 697 00:50:52,560 --> 00:51:00,570 xterm è un tipo di terminale per finestre visualizzate in X Window System. 698 00:51:00,570 --> 00:51:04,330 xterm-color è una variante di quella che consente diversi colori. 699 00:51:04,330 --> 00:51:06,580 Perché definiamo queste? Che cosa è questo bene per? 700 00:51:06,580 --> 00:51:09,740 I comandi che riorganizzano lo schermo come l'editor 701 00:51:09,740 --> 00:51:13,680 inviare particolari sequenze, dette sequenze di escape, 702 00:51:13,680 --> 00:51:18,160 ad un terminale o una finestra per riorganizzare esso e così via. 703 00:51:18,160 --> 00:51:20,990 Tali sequenze sono differenti per differenti tipi di terminali. 704 00:51:20,990 --> 00:51:23,100 Questo dice che quelli da usare. 705 00:51:23,100 --> 00:51:25,900 A volte ci sono problemi lì. 706 00:51:25,900 --> 00:51:28,600 Si potrebbe desiderare di cambiare la situazione. 707 00:51:28,600 --> 00:51:30,780 Se le cose non funzionano, a volte il tipo di terminale è impostato male, 708 00:51:30,780 --> 00:51:36,440 si può essere in grado di risolvere il problema ridefinendo la variabile termine. 709 00:51:36,440 --> 00:51:43,420 In questi casi, cambiando una variabile, la variabile o la variabile shell, 710 00:51:43,420 --> 00:51:45,970 dovrebbe cambiare l'altro. 711 00:51:45,970 --> 00:51:50,970 Ho scoperto attraverso l'esperienza che cambia TERM in lettere maiuscole 712 00:51:50,970 --> 00:51:54,060 non cambia sempre shell variabile termine in lettere minuscole. 713 00:51:54,060 --> 00:51:55,550 Questo è un bug. 714 00:51:55,550 --> 00:51:59,400 Non so se questo è sempre vero. Il più delle volte non è vero, ma può essere. 715 00:51:59,400 --> 00:52:02,490 Quindi, se si apporta una modifica, basta controllare che fuori. 716 00:52:02,490 --> 00:52:05,830 Non capita spesso che è necessario modificare quel valore, ma una volta ogni tanto si fa. 717 00:52:05,830 --> 00:52:08,260 Ambiente USER variabile. 718 00:52:08,260 --> 00:52:12,070 Ancora una volta, variabile di ambiente in lettere maiuscole, variabile di shell in lettere minuscole. 719 00:52:12,070 --> 00:52:13,710 Questo è il vostro nome utente. 720 00:52:13,710 --> 00:52:16,730 E 'solo in circostanze del tutto eccezionali 721 00:52:16,730 --> 00:52:18,420 che si vorrebbe cambiare la situazione. 722 00:52:18,420 --> 00:52:22,350 Se il nome utente è qualcun altro, può gettare ogni sorta di cose fuori. 723 00:52:22,350 --> 00:52:26,040 Home directory, directory home dell'utente. 724 00:52:26,040 --> 00:52:28,060 Anche in questo caso, non si vuole cambiare la situazione. 725 00:52:28,060 --> 00:52:32,260 Si noti in tutti questi casi e quello che vi stiamo per coprire la variabile di percorso, 726 00:52:32,260 --> 00:52:37,070 variabile di ambiente è in lettere maiuscole e la variabile legata scocca è in lettere minuscole. 727 00:52:37,070 --> 00:52:39,240 Se si modifica uno, si dovrebbe cambiare l'altro. 728 00:52:39,240 --> 00:52:45,960 Questo tipo di legame non può essere stabilita come non è possibile associare 2 variabili, 729 00:52:45,960 --> 00:52:50,570 Oltre a queste 4, e l'associazione di queste variabili non possono essere annullate, 730 00:52:50,570 --> 00:52:52,090 non è possibile separarli. 731 00:52:52,090 --> 00:52:55,820 Quindi questi 4 coppie di variabili sono vincolati. 732 00:52:55,820 --> 00:52:59,020 Essi saranno sempre. Nessuno altri saranno. 733 00:52:59,020 --> 00:53:05,720 Inoltre, sarebbe possibile creare variabili con gli stessi nomi 734 00:53:05,720 --> 00:53:07,780 dei tipi opposti. 735 00:53:07,780 --> 00:53:11,600 Si potrebbe fare un periodo variabile di shell in minuscolo 736 00:53:11,600 --> 00:53:14,990 o una variabile d'ambiente TERM in lettere maiuscole. 737 00:53:14,990 --> 00:53:19,040 Tali variabili sarebbero indipendente di queste coppie di variabili 738 00:53:19,040 --> 00:53:20,780 e sarebbero indipendenti l'uno dall'altro. 739 00:53:20,780 --> 00:53:23,780 Non riesco a immaginare il motivo per cui si dovrebbe farlo se non si vuole confondere la gente. 740 00:53:24,600 --> 00:53:29,730 Questo qui, variabile percorso, questo è uno davvero importante. 741 00:53:29,730 --> 00:53:35,550 Un'altra cosa è che ci possono essere casi 742 00:53:35,550 --> 00:53:40,430 di variabili con coppie di nomi simili che non sono legati gli uni agli altri. 743 00:53:40,430 --> 00:53:45,000 Ci possono essere variabili, SHELL e shell, in lettere maiuscole e minuscole. 744 00:53:45,000 --> 00:53:48,300 Sulla base di tale nome, non si sa se tale variabile è una variabile di shell 745 00:53:48,300 --> 00:53:51,580 o una variabile di ambiente, e sono non legati l'uno all'altro. 746 00:53:51,580 --> 00:53:55,300 Quindi, questo tipo di coppie di nomi non implica variabili legate. 747 00:53:55,300 --> 00:53:58,830 La variabile percorso, che stavo mostrando prima, 748 00:53:58,830 --> 00:54:01,880 è un elenco di percorsi in cui la shell cerca i comandi. 749 00:54:01,880 --> 00:54:12,320 Andiamo verso la finestra qui e noi penseremo echo $ PATH, lettere maiuscole - 750 00:54:12,320 --> 00:54:20,230 variabile d'ambiente - echo $ PATH, lettere minuscole - variabile di shell. 751 00:54:20,230 --> 00:54:24,980 Si noti che l'elenco delle directory è la stessa. Questi sono vincolati. 752 00:54:24,980 --> 00:54:26,590 Cambiare, di cambiare l'altro. 753 00:54:26,590 --> 00:54:32,970 Nella variabile di ambiente gli elementi sono separati da due punti. Si noti che. 754 00:54:32,970 --> 00:54:35,130 Le variabili di shell sono separati da spazi. 755 00:54:35,130 --> 00:54:38,760 Questa variabile di ambiente è una singola stringa. 756 00:54:38,760 --> 00:54:41,480 La variabile di shell è un array. 757 00:54:41,480 --> 00:54:43,490 La Bourne shell non hanno matrici. 758 00:54:43,490 --> 00:54:46,600 Bash fa, ma questa è già una parte fissa del guscio. 759 00:54:46,600 --> 00:54:48,660 Si tratta di una singola stringa e non un array. 760 00:54:48,660 --> 00:54:50,420 Il C-shell sempre avuto array. 761 00:54:50,420 --> 00:54:52,630 Gli array sono molto più facili da lavorare. 762 00:54:52,630 --> 00:54:54,400 È possibile fare riferimento a parti di esso. 763 00:54:54,400 --> 00:55:02,350 $ Path Quindi echo [1] e ottengo / usr / bin, il primo elemento. 764 00:55:02,350 --> 00:55:09,950 Ancora una volta, ricordate segno del dollaro rappresenta l'ultimo elemento della lista della storia. 765 00:55:09,950 --> 00:55:16,850 Che cosa succede lì? Ha cercato di trovare il segno del dollaro come simbolo variabile. 766 00:55:16,850 --> 00:55:20,850 Io sfuggire. Oops. Non ci sarebbe voluto nemmeno questo. 767 00:55:20,850 --> 00:55:23,690 Alcune di queste cose non funzionano così bene. 768 00:55:23,690 --> 00:55:28,140 Forse ci lasciamo che fuori. 769 00:55:28,140 --> 00:55:36,980 Asterisk si riferisce a tutta la cosa, ma questo è quello che si ottiene se non si specifica un elemento. 770 00:55:36,980 --> 00:55:46,170 Un altro modo che le variabili di matrice possono essere manipolati, 771 00:55:46,170 --> 00:55:49,500 numero di elementi là, 7 elementi. 772 00:55:49,500 --> 00:55:53,410 Qui abbiamo messo il cancelletto prima del nome della variabile. 773 00:55:53,410 --> 00:55:58,280 Ecco un altro. Mettere un punto interrogativo lì. 774 00:55:58,280 --> 00:56:03,170 Questo è un valore logico. Ciò indica che la variabile esiste. 775 00:56:03,170 --> 00:56:05,160 E 'un altro modo di lavorare con le variabili. 776 00:56:05,160 --> 00:56:06,660 Che, tra l'altro, non deve essere una variabile di matrice. 777 00:56:06,660 --> 00:56:08,210 Questo potrebbe essere qualsiasi variabile. 778 00:56:08,210 --> 00:56:11,840 E se lo faccio, non c'è tale variabile e ottengo uno 0. 779 00:56:11,840 --> 00:56:14,990 Un'altra piccola cosa lì circa le valutazioni variabili. 780 00:56:23,670 --> 00:56:32,950 Torna a questa qui, se per qualche motivo si voleva lavorare con questo 781 00:56:32,950 --> 00:56:37,990 piuttosto che lavorare con la matrice, la variabile di shell, 782 00:56:37,990 --> 00:56:41,470 ci sono comandi che possono separare queste cose basato sul colon. 783 00:56:41,470 --> 00:56:44,080 Infatti, se avete intenzione di fare questo nella shell Bash, eventualmente, 784 00:56:44,080 --> 00:56:47,110 una specie di copione, che sarebbe probabilmente come si dovrebbe fare. 785 00:56:47,110 --> 00:56:50,350 Ma nel C-shell è molto più facile da usare l'array. 786 00:56:50,350 --> 00:56:58,250 Nel Bourne shell, le variabili vengono assegnati da una sola espressione come questo, 787 00:56:58,250 --> 00:57:01,760 come il modo in cui è possibile assegnare una variabile in un linguaggio di programmazione, 788 00:57:01,760 --> 00:57:05,110 e qui non ci devono essere spazi. 789 00:57:05,110 --> 00:57:09,110 E 'necessario che si tratti solo 1 stringa. 790 00:57:09,110 --> 00:57:14,980 Nelle shell di tipo Bourne, tutte le variabili sono variabili di shell. 791 00:57:14,980 --> 00:57:19,250 Le variabili d'ambiente sono un sottoinsieme delle variabili di shell. 792 00:57:19,250 --> 00:57:24,060 Si distinguono dalle variabili non-ambiente esportando. 793 00:57:24,060 --> 00:57:28,860 Il comando per farlo è quello di esportazione, come l'esportazione STAMPANTE. 794 00:57:28,860 --> 00:57:34,930 Se dovessimo definire una tale variabile, 795 00:57:34,930 --> 00:57:38,480 se volevamo un comando di stampa da trovare, sarebbe dovuto essere una variabile di ambiente, 796 00:57:38,480 --> 00:57:40,730 ed è così che facciamo uno. 797 00:57:40,730 --> 00:57:42,090 Qui c'è qualcosa tipo di confusione. 798 00:57:42,090 --> 00:57:50,430 Questa espressione, l'esportazione verso l'ambiente, deriva da questo concetto shell Bourne, 799 00:57:50,430 --> 00:57:54,520 e tuttavia tale espressione è utilizzata in descrizioni del C-shell, 800 00:57:54,520 --> 00:57:57,920 dove non esiste tale comando come esportazione. 801 00:57:57,920 --> 00:58:06,200 Se hai appena detto esportazione di per sé, si ottiene una lista di esportato - 802 00:58:06,200 --> 00:58:10,620 Quindi, se io proprio non esportare qui, nulla di simile. 803 00:58:13,620 --> 00:58:15,200 Ok, ce ne andiamo. 804 00:58:15,200 --> 00:58:17,010 Queste cose, tra l'altro, sono anche definiti dalla shell. 805 00:58:17,010 --> 00:58:19,400 Non mi definisco uno di questi da me. 806 00:58:19,400 --> 00:58:23,550 La shell fa un sacco di cose da sé. 807 00:58:23,550 --> 00:58:26,650 Si dovrebbe fare automaticamente le cose. 808 00:58:30,240 --> 00:58:36,880 In Bash e Korn shell, è possibile eseguire un comando come questo, 809 00:58:36,880 --> 00:58:42,000 che sia dare una variabile un valore ed esportarlo in 1 comando. 810 00:58:42,000 --> 00:58:46,150 Nella shell Bourne devono essere comandi separati come export a. 811 00:58:46,150 --> 00:58:48,410 Ecco un altro aspetto che è confusa. 812 00:58:48,410 --> 00:58:52,220 Il comando set nella C-shell definisce le variabili 813 00:58:52,220 --> 00:58:55,550 e senza argomenti ti dice quali sono i valori delle variabili sono. 814 00:58:55,550 --> 00:59:01,140 Nella shell Bash, il comando set senza argomenti fa la stessa cosa, 815 00:59:01,140 --> 00:59:03,580 ma con argomenti che fa qualcosa di molto diverso. 816 00:59:03,580 --> 00:59:06,200 Quindi questi sono i vari argomenti qui. 817 00:59:06,200 --> 00:59:10,460 Alcuni di questi sono variabili di ambiente, alcuni di loro sono variabili di shell. 818 00:59:10,460 --> 00:59:13,200 Tutti loro sono variabili di shell davvero. Alcuni di questi sono variabili d'ambiente. 819 00:59:15,690 --> 00:59:23,920 Il comando set con argomenti può essere utilizzato per azionare 820 00:59:23,920 --> 00:59:28,220 sui parametri posizionali a uno script, 821 00:59:28,220 --> 00:59:33,910 che è un modo di farli tutti in una volta. 822 00:59:33,910 --> 00:59:36,150 Non possiamo davvero andare in quella di oggi. 823 00:59:36,150 --> 00:59:39,580 Può anche essere utilizzato per modificare il comportamento shell. 824 00:59:39,580 --> 00:59:46,700 In particolare in Bash ci sono variabili che determineranno come la shell si comporta. 825 00:59:46,700 --> 00:59:51,310 Poi anche solo questo comando che si potrebbe vedere, questo comando. 826 00:59:51,310 --> 00:59:59,050 Comporre seguita da variabili e tipi di variabili è usato nei gusci Korn e Bash. 827 00:59:59,050 --> 01:00:04,970 Non è obbligatorio ma può essere utilizzato per limitare i valori delle variabili, 828 01:00:04,970 --> 01:00:08,400 che può essere utile per evitare errori, ed è abbastanza comune. 829 01:00:08,400 --> 01:00:11,640 Così sto solo ricordare che nel caso in cui si vede da qualche parte. 830 01:00:17,290 --> 01:00:19,160 Il comando dove. 831 01:00:19,160 --> 01:00:22,490 Ricordati ho detto in precedenza il cui comando nella C-shell, 832 01:00:22,490 --> 01:00:28,750 che può dire la posizione di un percorso di comando. 833 01:00:28,750 --> 01:00:32,580 Ecco la sostituzione di comando. 834 01:00:32,580 --> 01:00:41,900 Si dovrebbe trovare sulla tastiera da qualche parte un personaggio che assomiglia a questo. 835 01:00:41,900 --> 01:00:44,910 La posizione sulla tastiera sta andando a variare. 836 01:00:44,910 --> 01:00:47,050 Abbiamo chiamavamo backquote. E 'circa le dimensioni di un preventivo. 837 01:00:47,050 --> 01:00:48,720 Si va dall'alto a sinistra al basso a destra. 838 01:00:48,720 --> 01:00:52,690 Qui sulla mia tastiera Mac è nell'angolo superiore sinistro. 839 01:00:52,690 --> 01:00:58,150 Tale carattere può essere utilizzato per eseguire un comando all'interno di un comando. 840 01:00:58,150 --> 01:01:03,400 Se si dispone di un'espressione all'interno apici, 841 01:01:03,400 --> 01:01:07,080 che l'espressione è un comando, è eseguito. 842 01:01:07,080 --> 01:01:09,010 L'output di tale comando 843 01:01:09,010 --> 01:01:11,980 viene poi sostituito per l'intera espressione backquote 844 01:01:11,980 --> 01:01:16,110 all'interno di un comando più che poi viene eseguito con tale uscita 845 01:01:16,110 --> 01:01:22,010 come parte della sua serie di argomenti e così via. 846 01:01:22,010 --> 01:01:28,640 Ecco un comando che utilizza tale. 847 01:01:28,640 --> 01:01:32,340 Facciamo dimostrano l'operazione qui. 848 01:01:44,980 --> 01:01:49,090 Andiamo qui, togliere le apici. 849 01:01:49,090 --> 01:01:54,410 Controllo A me arriva all'inizio della riga con la sintassi di editing di Emacs. 850 01:01:54,410 --> 01:02:00,380 Finora l'percorsi è quello in cui lo fa, 851 01:02:00,380 --> 01:02:05,040 ma quando lo faccio in questo modo, si inserisce poi in quella lista di nomi di percorso 852 01:02:05,040 --> 01:02:08,750 al posto di tale espressione backquote intero e corre ls-l su di essi. 853 01:02:08,750 --> 01:02:11,120 Tipo di comodo, eh? 854 01:02:11,120 --> 01:02:14,860 Ecco, questo è una cosa semplice. Ecco come apici funzionano. 855 01:02:14,860 --> 01:02:17,560 Ora andiamo giù un po 'oltre. 856 01:02:17,560 --> 01:02:22,050 Questi sono gli alias. Io in realtà uso questi. 857 01:02:22,050 --> 01:02:26,410 Cercherò di ottenere questo con 1 operazione di editing. 858 01:02:34,900 --> 01:02:36,900 Ok. 859 01:02:36,900 --> 01:02:39,630 Ora vediamo come queste due definizioni è venuto fuori. 860 01:02:39,630 --> 01:02:44,930 alias LWH dirmi come è definito. 861 01:02:44,930 --> 01:02:51,210 Si noti che è solo questo, ma le citazioni esterne sono state prese fuori 862 01:02:51,210 --> 01:02:53,750 e il punto esclamativo è decollato. 863 01:02:53,750 --> 01:02:58,940 ! *, Elenco completo di tutti gli argomenti. 864 01:02:58,940 --> 01:03:03,580 In una definizione di alias che si applica di nuovo a dove io uso questo. 865 01:03:03,580 --> 01:03:10,620 LWH ksh bash. Ok. 866 01:03:10,620 --> 01:03:13,960 Vedi come funziona? Mi fa risparmiare qualche digitazione. 867 01:03:13,960 --> 01:03:16,440 Andiamo un po 'tanto per citare un altro qui. 868 01:03:19,150 --> 01:03:23,120 Notate qui queste diverse conchiglie. Avrei detto prima. 869 01:03:23,120 --> 01:03:36,060 Il csh ha un 2 qui e così fa / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 Potremmo stabilire con altri mezzi che coloro che sono in realtà lo stesso file. 871 01:03:39,870 --> 01:03:43,150 Ricordo che stavo dicendo se si digita sh si ottiene bash. 872 01:03:43,150 --> 01:03:47,390 Digitare questo e si ottiene questo. 873 01:03:47,390 --> 01:03:51,730 Ma quelli non sono collegati. Quelli sono quelli singoli lì. 874 01:03:51,730 --> 01:03:54,910 E questo non è il tipo di file di cui può chiamare un altro. 875 01:03:54,910 --> 01:03:59,460 Quindi questi sono file separati, quelli C-shell sono lo stesso file. 876 01:03:59,460 --> 01:04:03,640 Torna qui, l'altro qui, questo alias, 877 01:04:03,640 --> 01:04:09,090 notare che è l'esecuzione di questo comando, file. 878 01:04:09,090 --> 01:04:13,810 Che alias corre questo. File indica il tipo di file. 879 01:04:13,810 --> 01:04:20,330 Così FWH bash ksh. Ok. 880 01:04:20,330 --> 01:04:23,230 Questo è l'output del comando file. 881 01:04:23,230 --> 01:04:24,630 Non so se sapete cosa significa questo qui, 882 01:04:24,630 --> 01:04:26,750 Mach-O binario universale con 2 architetture. 883 01:04:26,750 --> 01:04:30,470 Ci sono due possibili tipi di processore a Mac, 884 01:04:30,470 --> 01:04:34,780 e alcuni programmi sono stati scritti per essere in grado di funzionare con entrambi, 885 01:04:34,780 --> 01:04:37,950 e il comando file può stabilire che, così questo è ciò che questo significa. 886 01:04:37,950 --> 01:04:40,660 Entrambi questi file sono stati scritti in questo modo. 887 01:04:40,660 --> 01:04:43,760 Così vediamo come funziona l'alias, vediamo come funziona il backquote, 888 01:04:43,760 --> 01:04:48,640 vediamo come funziona ls file effettivo o file. 889 01:04:52,050 --> 01:04:57,000 Questo potrebbe non funzionare. Prova "dove dove" e "LLA dove". Ok, proviamo questo. 890 01:04:57,000 --> 01:05:01,040 dove dove. 891 01:05:01,040 --> 01:05:03,500 dove è un guscio built-in. 892 01:05:03,500 --> 01:05:06,970 Ricordate che in precedenza abbiamo dimostrato che Bash non aveva dove. 893 01:05:06,970 --> 01:05:10,080 Se si digita dove nella shell Bash, si ottiene un messaggio di errore. 894 01:05:10,080 --> 01:05:12,540 E 'solo una parte del guscio piuttosto che essere un comando separato. 895 01:05:12,540 --> 01:05:20,000 Cosa succede se digito LLA cercando dove? Vedere cosa succede lì. 896 01:05:20,000 --> 01:05:22,850 Ran dove dove, preso questa uscita, e poi ha cercato di eseguire ls 897 01:05:22,850 --> 01:05:25,600 come l su cui è un guscio incorporato. 898 01:05:25,600 --> 01:05:28,790 dove è lì, ma non esistono gli altri. 899 01:05:28,790 --> 01:05:32,090 Nessuno di questi esiste, in realtà. 900 01:05:32,090 --> 01:05:35,560 In modo che non sempre funziona, e illustra anche come alcune cose 901 01:05:35,560 --> 01:05:39,580 non fare tutto ciò che si potrebbe pensare. 902 01:05:40,930 --> 01:05:43,010 Scendiamo un po 'più qui. 903 01:05:44,890 --> 01:05:54,760 Questo qui è in Bash. Questa è anche la sostituzione di comando come il backquote. 904 01:05:54,760 --> 01:06:05,280 Ma a differenza di backquote, utilizza questo stile variabile. 905 01:06:05,280 --> 01:06:09,860 Ci sono una serie di espressioni che iniziano con il simbolo del dollaro, 906 01:06:09,860 --> 01:06:16,070 e mentre questi non sono variabili, hanno preso in prestito l'uso del segno del dollaro 907 01:06:16,070 --> 01:06:19,570 per indicare un'espressione di qualche tipo. 908 01:06:19,570 --> 01:06:23,550 Che può essere circondati da parentesi o parentesi o doppie parentesi, 909 01:06:23,550 --> 01:06:26,320 che ha uno scopo differente. 910 01:06:26,320 --> 01:06:29,500 Tra parentesi singole qui sono una sostituzione di comando, proprio come apici. 911 01:06:29,500 --> 01:06:32,720 Le doppie parentesi è in realtà un'operazione aritmetica. 912 01:06:32,720 --> 01:06:35,380 Ci sono altre sintassi, altre operazioni. 913 01:06:35,380 --> 01:06:41,520 Sintassi backquote è disponibile in Bash. 914 01:06:41,520 --> 01:06:46,780 Tuttavia, questo è preferibile. E 'molto più facile da leggere e consente la nidificazione. 915 01:06:46,780 --> 01:06:51,300 Si può avere all'interno $ (comando) un altro comando, 916 01:06:51,300 --> 01:06:54,590 qualcosa di simile - 917 01:07:14,560 --> 01:07:18,210 Ho un elenco di lì. 918 01:07:18,210 --> 01:07:21,670 Che avrebbe funzionato se ho avuto anche la backquote. 919 01:07:32,050 --> 01:07:38,470 Cosa succede se voglio fare qualcosa di simile - 920 01:08:03,390 --> 01:08:06,430 Probabilmente non sarebbe in realtà usare questo comando, 921 01:08:06,430 --> 01:08:14,160 ma questa sostituzione comando interno riecheggia i nomi di tutti i file che iniziano con un 922 01:08:14,160 --> 01:08:18,229 allora questo esegue ls-l su quei file, 923 01:08:18,229 --> 01:08:20,500 e poi questa eco solo l'uscita. 924 01:08:21,729 --> 01:08:24,479 Probabilmente non sarebbe fare questo, devi solo fare l'eco o LS, 925 01:08:24,479 --> 01:08:29,450 ma questo illustra come funziona la nidificazione dei comandi. 926 01:08:29,450 --> 01:08:34,380 Quindi, solo un'altra caratteristica qui. 927 01:08:34,380 --> 01:08:37,450  Ne ho parlato in precedenza, che quando si ha dove nel C-shell, 928 01:08:37,450 --> 01:08:42,770 digitare opere nelle shell di tipo Bourne per la localizzazione dei comandi. 929 01:08:48,939 --> 01:08:52,270 Comandi integrati, proprio quello che stavo dicendo che c'è. 930 01:08:52,270 --> 01:08:54,640 I comandi sono parte della shell, come dove. 931 01:08:54,640 --> 01:08:59,880 Quando la shell esegue un comando come ls, individua attraverso il percorso, 932 01:08:59,880 --> 01:09:03,029 lo trova in una directory da qualche parte, 933 01:09:03,029 --> 01:09:05,800 legge che in memoria, crea una nuova shell, 934 01:09:05,800 --> 01:09:08,960 legge i comando ls o qualsiasi altra cosa nella shell 935 01:09:08,960 --> 01:09:11,450 dove le variabili di ambiente si trovano già, 936 01:09:11,450 --> 01:09:14,000 e poi si trasferisce l'esecuzione ad esso. 937 01:09:14,000 --> 01:09:18,319 Built-in comando, il codice per quel comando si trova all'interno del guscio, 938 01:09:18,319 --> 01:09:21,460 così il guscio inizia proprio eseguendo parte del proprio codice. 939 01:09:21,460 --> 01:09:24,569 dove è un tal ordine. In realtà diventa più veloce. 940 01:09:24,569 --> 01:09:28,380 Non deve leggere qualcosa in memoria, è già in memoria. 941 01:09:28,380 --> 01:09:32,460 Comandi incorporati hanno sempre la precedenza sui comandi con lo stesso nome. 942 01:09:32,460 --> 01:09:36,050 I comandi che si trovano nella directory nel percorso possono avere lo stesso nome, 943 01:09:36,050 --> 01:09:39,090 comandi in diverse directory, i file in diverse directory. 944 01:09:39,090 --> 01:09:41,740 Quello che si verifica in precedenza nel percorso è quello che si otterrà. 945 01:09:41,740 --> 01:09:43,770 Se vi è un comando built-in, si ottiene sempre esso. 946 01:09:43,770 --> 01:09:47,890 Non c'è modo per dare una precedenza inferiore rispetto a un comando nel percorso. 947 01:09:47,890 --> 01:09:54,140 Se si vuole ottenere che il comando percorso, è possibile digitare il percorso completo. 948 01:09:54,140 --> 01:09:55,850 Se ci fosse un comando in cui nel percorso qualche parte, 949 01:09:55,850 --> 01:09:58,440 è possibile digitare / bin / dove e desideri farlo. 950 01:09:58,440 --> 01:10:01,800 Se non si desidera digitare l'intero percorso, è possibile definire un alias. 951 01:10:01,800 --> 01:10:06,310 In realtà, se ti ha dato l'alias lo stesso nome del comando built-in, che avrebbe funzionato 952 01:10:06,310 --> 01:10:08,790 perché la definizione di alias viene valutata 953 01:10:08,790 --> 01:10:13,220 prima che la shell determina che si tratta di un comando built-in che dovrebbe essere eseguito. 954 01:10:18,810 --> 01:10:23,440 Allora questo diventa un po 'più complicato con alcuni comandi qui. 955 01:10:23,440 --> 01:10:29,880 Il caso di alcuni comandi sono effettivamente incorporati nei comandi e nel percorso. 956 01:10:29,880 --> 01:10:34,140 Uno di questi è l'eco, il comando ho solo usato un po 'di tempo fa, in questi esempi. 957 01:10:34,140 --> 01:10:37,410 Echo è un comando nel percorso e in ogni shell. 958 01:10:37,410 --> 01:10:40,580 Non necessariamente comportano sempre allo stesso modo. 959 01:10:40,580 --> 01:10:42,970 In origine era un comando solo nel percorso. 960 01:10:42,970 --> 01:10:45,280 E 'stato costruito per i gusci più tardi. 961 01:10:45,280 --> 01:10:48,080 Poiché ci sono opzioni che dipendono dall'ambiente 962 01:10:48,080 --> 01:10:52,970 e le opzioni della riga di comando, i comandi incorporati 963 01:10:52,970 --> 01:10:57,030 sono stati scritti per funzionare lo stesso del comando che era stato nel percorso, 964 01:10:57,030 --> 01:10:59,670 è improbabile che sarebbero state scritte in quel modo 965 01:10:59,670 --> 01:11:01,720 se il comando non fosse già stato scritto per il percorso. 966 01:11:01,720 --> 01:11:06,180 Quindi questo ha effetti collaterali. La sua storia ha effetti qui. 967 01:11:06,180 --> 01:11:08,380 Ci sono opzioni lì. 968 01:11:14,280 --> 01:11:23,060 C'è anche un'opzione definita da una variabile nella tcsh chiamato echo_style. 969 01:11:23,060 --> 01:11:27,700 Questa è una di queste variabili che possono cambiare il modo in cui eco funziona. 970 01:11:27,700 --> 01:11:30,910 Ci sono altri casi in cui è possibile assegnare una variabile 971 01:11:30,910 --> 01:11:36,290 che cambia il modo che l'operazione shell, compreso un comando incorporato, funziona. 972 01:11:36,290 --> 01:11:38,130 Esso non inciderebbe altro 973 01:11:38,130 --> 01:11:40,640 dal momento che altri comandi non hanno accesso alle variabili di shell, 974 01:11:40,640 --> 01:11:42,090 solo le variabili di ambiente. 975 01:11:42,090 --> 01:11:45,360 Ma le operazioni di shell può leggere le variabili di shell. 976 01:11:45,360 --> 01:11:50,710 Che non funzionerà per csh. Questa è solo tcsh. Questo è uno dei miglioramenti. 977 01:11:58,540 --> 01:12:04,620 Analisi ha sequenze quando si valuta metacaratteri, 978 01:12:04,620 --> 01:12:08,140 quando valuta le variabili, alias, riferimenti di storia. 979 01:12:08,140 --> 01:12:11,830 C'è una sequenza particolare per queste cose. 980 01:12:11,830 --> 01:12:13,730 Se lo fa le cose in una particolare sequenza 981 01:12:13,730 --> 01:12:16,080 e arriva a qualcosa che è espressione di una sorta 982 01:12:16,080 --> 01:12:20,650 che è già stato valutato, ma non valuterà nuovamente. 983 01:12:20,650 --> 01:12:24,520 Se si ottiene, allora sarà sufficiente passare sui personaggi. 984 01:12:24,520 --> 01:12:29,920 Quindi, se la valutazione di alcune espressioni come la sostituzione di comando 985 01:12:29,920 --> 01:12:36,850 o variabile o qualsiasi altra cosa dà luogo ad una espressione 986 01:12:36,850 --> 01:12:39,240 che si vorrebbe essere valutati, 987 01:12:39,240 --> 01:12:42,510 che funzionerà soltanto se la valutazione avviene più tardi nella sequenza. 988 01:12:42,510 --> 01:12:45,010 Spero di essere chiaro lì. 989 01:12:45,010 --> 01:12:50,460 Tale sequenza parsing, un'operazione nel C-shell, 990 01:12:50,460 --> 01:12:56,490 non è lo stesso per i comandi incorporati come lo è per non integrati nei comandi. 991 01:12:56,490 --> 01:12:58,890 Io non sono sicuro di Bash lì. 992 01:12:58,890 --> 01:13:02,450 Ad esempio, se una variabile shell prodotto un riferimento storia, 993 01:13:02,450 --> 01:13:04,230 probabilmente non sarebbe tornare indietro nella storia. 994 01:13:04,230 --> 01:13:06,010 Sarebbe solo ottenere il punto esclamativo. 995 01:13:06,010 --> 01:13:08,840 In realtà, possiamo solo provare che fuori proprio ora. 996 01:13:09,720 --> 01:13:18,240 set a = e dovremo mettere questo in là. 997 01:13:30,690 --> 01:13:34,580 Oh, aspetta. Scusi. Ho fatto questo in Bash. Volevo farlo qui. 998 01:13:53,470 --> 01:13:56,080 Vedere, quindi non ha valutato che il riferimento della storia 999 01:13:56,080 --> 01:14:00,520 perché era già passato il punto di valutazione di espressioni storia 1000 01:14:00,520 --> 01:14:02,720 quando ha valutato la variabile. 1001 01:14:02,720 --> 01:14:05,550 Ecco, questo è uno effetto di parsing. 1002 01:14:05,550 --> 01:14:08,760 E ancora, i comandi incorporati non sono fatte allo stesso modo. 1003 01:14:08,760 --> 01:14:11,230 Bene. Andiamo alla prossima qui. 1004 01:14:11,230 --> 01:14:16,060 Questo è destinato ad essere 1 linea, ma è rendere più facile la lettura. 1005 01:14:19,130 --> 01:14:21,530 Che cosa fare? 1006 01:14:21,530 --> 01:14:28,640 Si può ricordare che possiamo valutare asterischi come caratteri jolly filename, 1007 01:14:28,640 --> 01:14:33,890 e ci sono altri jolly filename come il punto di domanda e le espressioni staffa. 1008 01:14:33,890 --> 01:14:39,000 Questo tipo di valutazione è chiamato globbing. 1009 01:14:39,000 --> 01:14:46,290 impostare noglob all'inizio di questo comando dice di non farlo. 1010 01:14:46,290 --> 01:14:53,370 noglob unset dice che tornare a farlo. 1011 01:14:53,370 --> 01:14:56,440 Si noti che insieme glob non avrebbe questo effetto. 1012 01:14:56,440 --> 01:15:00,800 Nel linguaggio comune, glob impostare o noglob disinserito sembrano essere equivalenti, 1013 01:15:00,800 --> 01:15:03,290 ma qui non lo è. E 'noglob disinserito. 1014 01:15:05,120 --> 01:15:07,910 Ora tset. tset stava per set terminale. 1015 01:15:07,910 --> 01:15:11,840 Non è usato spesso ora, ma prima di sistemi a finestre sono resi disponibili 1016 01:15:11,840 --> 01:15:15,760 e hai avuto un unico terminale, potrebbe essere necessario determinare il tipo. 1017 01:15:15,760 --> 01:15:18,700 E se qualcosa stava over Ethernet o dalla rete, 1018 01:15:18,700 --> 01:15:21,120 si potrebbe desiderare di dire che è una vt100. 1019 01:15:21,120 --> 01:15:26,630 VT100 è una specie di uno standard nel settore terminale. Proviene dal terminale dicembre. 1020 01:15:26,630 --> 01:15:35,270 Se solo fare dialup - notare che? Questo risale a modi, eh? 1021 01:15:35,270 --> 01:15:39,520 Quindi, se abbiamo appena facciamo TSET qui, 1022 01:15:39,520 --> 01:15:45,250 se io faccio solo tset, è il ripristino mio terminale, ma non hai visto niente. 1023 01:15:45,250 --> 01:15:47,340 Essa in realtà non cambia nulla. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Ok. 1026 01:15:51,480 --> 01:15:53,350 TERM setenv xterm-color. 1027 01:15:53,350 --> 01:15:57,080 Sappiamo già che il termine è stato fissato in quel modo, in modo che non cambiava. 1028 01:15:57,080 --> 01:15:58,860 Questo è il modo in cui vorremmo farlo. 1029 01:15:58,860 --> 01:16:07,080 Ma si noti che questo comando, Tset-s, appena uscita questi comandi. E non li ha eseguito. 1030 01:16:07,080 --> 01:16:09,770 Non ha eseguito questi comandi, ma l'uscita di loro. 1031 01:16:09,770 --> 01:16:13,650 Quindi questo è destinato a produrre i comandi che poi verranno eseguiti. 1032 01:16:13,650 --> 01:16:16,360 Vi ricordate il comando in quel file ho appena mostrato tu avessi una Q in esso. 1033 01:16:16,360 --> 01:16:18,910 Allora facciamolo. 1034 01:16:18,910 --> 01:16:23,750 Il Q sopprime qualche uscita, ma questo non ha importanza qui, come potete vedere. 1035 01:16:23,750 --> 01:16:27,980 Sto solo facendo quello di mostrare che non aveva importanza. 1036 01:16:27,980 --> 01:16:31,870 Questo è nella sintassi backquote. 1037 01:16:31,870 --> 01:16:35,340 Notare il backquote qui, backquote qui. 1038 01:16:35,340 --> 01:16:37,680 Sto omettendo queste cose qui. 1039 01:16:37,680 --> 01:16:39,570 Questi sono i casi di raccontare che cosa fare 1040 01:16:39,570 --> 01:16:42,050 in caso di particolari tipi di terminali - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, rete, accesso remoto, quello che hai. 1042 01:16:45,400 --> 01:16:48,050 Non importa qui perché non stiamo effettivamente facendo una qualsiasi di queste cose. 1043 01:16:48,050 --> 01:16:49,720 Sto solo illustrando il comando. 1044 01:16:49,720 --> 01:16:55,170 Se faccio questo con il backquote, cosa posso ottenere? 1045 01:16:55,170 --> 01:17:00,210 Notate anche qui che questo incluso il noglob set e il noglob impostata, 1046 01:17:00,210 --> 01:17:02,630 così quelli sono ormai obsolete nella definizione. 1047 01:17:02,630 --> 01:17:05,380 Questo non è sempre vero, ma ora sono incluse in questo comando. 1048 01:17:05,380 --> 01:17:08,890 Ma vediamo cosa succede se lo faccio 1049 01:17:08,890 --> 01:17:12,570 e andare all'inizio della linea con controllo di A e lo faccio. 1050 01:17:14,380 --> 01:17:18,040 Okay, impostare: Command not found. Questo è un po 'strano, non è vero? 1051 01:17:18,040 --> 01:17:20,570 set è un comando noto. E 'parte della shell. 1052 01:17:20,570 --> 01:17:24,040 set: Command not found? Perché è così? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Bene, pensiamo a questo. 1054 01:17:26,790 --> 01:17:31,100 E 'esecuzione di una sostituzione di comando backquote, 1055 01:17:31,100 --> 01:17:37,430 e che avviene ad una certa parte della sequenza di parsing del comando. 1056 01:17:37,430 --> 01:17:40,360 set è un comando incorporato. 1057 01:17:40,360 --> 01:17:43,900 Così, il tempo che fa che la sostituzione di comando, 1058 01:17:43,900 --> 01:17:48,280 è già ottenuto oltre il punto di identificare comandi incorporati. 1059 01:17:48,280 --> 01:17:51,900 Così tratta impostato come se fosse un comando nel percorso. 1060 01:17:51,900 --> 01:17:55,440 Inutile dire che non lo trova e si ottiene un errore. 1061 01:17:55,440 --> 01:17:59,300 Bene. C'è un esempio di sequenza di parsing. 1062 01:17:59,300 --> 01:18:01,460 E cosa facciamo di questo? 1063 01:18:01,460 --> 01:18:04,800 Notate questo comando molto interessante, eval. 1064 01:18:04,800 --> 01:18:06,530 Mi chiedo cosa che fa. 1065 01:18:06,530 --> 01:18:08,760 Se si guarda al manuale - e cerchiamo di fare solo quello 1066 01:18:08,760 --> 01:18:12,000 per mostrare come confusione di questi manuali sono - 1067 01:18:12,000 --> 01:18:19,400 uomo tcsh, manuale confusa, trovare le cose qui non è facile. 1068 01:18:19,400 --> 01:18:31,850 Qui andiamo, eval arg, così possiamo avere uno o più argomenti 1069 01:18:31,850 --> 01:18:34,090 e c'è una lista di cose lì. 1070 01:18:34,090 --> 01:18:37,730 Tratta argomenti come input per la shell 1071 01:18:37,730 --> 01:18:43,600 ed esegue i comandi risultanti nel contesto della shell corrente. 1072 01:18:43,600 --> 01:18:46,900 Questo è di solito utilizzato per eseguire comandi generati come risultato di comando 1073 01:18:46,900 --> 01:18:51,310 o sostituzione delle variabili perché l'analisi si verifica prima queste sostituzioni. 1074 01:18:51,310 --> 01:18:52,580 Molto bene. 1075 01:18:52,580 --> 01:18:54,740 E qui si riferiscono anche al comando tset per un uso del campione 1076 01:18:54,740 --> 01:18:57,700 come quella che ho appena mostrato. 1077 01:18:57,700 --> 01:19:00,440 Ora devo ottenere la finestra di nuovo ad un posto utile. 1078 01:19:03,150 --> 01:19:07,800 Andiamo qui e vedremo che eval viene utilizzato poco prima che. 1079 01:19:07,800 --> 01:19:14,010 Quindi cerchiamo di vedere cosa succede se mettiamo - qui andiamo con le frecce per quel comando 1080 01:19:14,010 --> 01:19:20,940 e Controllo A all'inizio, eval. 1081 01:19:20,940 --> 01:19:22,850 Va bene, così funziona. 1082 01:19:22,850 --> 01:19:26,440 Quando si esegue eval, si prende quello che viene dopo e lo rende un comando. 1083 01:19:26,440 --> 01:19:29,460 Ciò consente di analizzare essenzialmente due volte. 1084 01:19:29,460 --> 01:19:33,710 La sezione qui esegue il comando all'interno degli apici rovesciati, 1085 01:19:33,710 --> 01:19:36,210 ottiene l'uscita. 1086 01:19:36,210 --> 01:19:42,850 Uscita dovrebbe essere eseguito come quei comandi qui come questi 1087 01:19:42,850 --> 01:19:45,890 a questa e questa. 1088 01:19:45,890 --> 01:19:50,100 Quindi tali comandi sono ora qui in questa sequenza, 1089 01:19:50,100 --> 01:19:58,950 ma questi sono integrati nei comandi e non può ottenere subito. 1090 01:19:58,950 --> 01:20:06,440 Quindi andiamo a eval, eval prende che fino, inizia il tutto di nuovo, e funziona. 1091 01:20:06,440 --> 01:20:18,460 Un esempio entrambi backquoting, eval, analisi, le conseguenze di parsing, 1092 01:20:18,460 --> 01:20:21,910 e un comando che probabilmente è di uso molto poco per voi oggi. 1093 01:20:21,910 --> 01:20:25,540 Ok. Va bene, umask. 1094 01:20:25,540 --> 01:20:32,160 Diamo un'occhiata a questo comando qui, umask 022. Mi chiedo cosa che fa. 1095 01:20:32,160 --> 01:20:38,420 Diciamo solo digitare umask con niente dopo di esso. 22. Ok. 1096 01:20:38,420 --> 01:20:44,350 022 e farlo di nuovo. 1097 01:20:44,350 --> 01:20:48,580 Come si può immaginare, umask senza argomenti si racconta la corrente della maschera; 1098 01:20:48,580 --> 01:20:51,760 umask con argomenti rende tale, ma che era quello che avevo già. 1099 01:20:51,760 --> 01:20:53,800 Cosa vuol dire 022? 1100 01:21:01,650 --> 01:21:07,080 Questi sono qui le protezioni di un file. 1101 01:21:07,080 --> 01:21:11,440 Essi determinano chi può leggere o scrivere o eseguire il file. 1102 01:21:11,440 --> 01:21:16,560 Protezioni sono anche chiamati autorizzazioni. 1103 01:21:16,560 --> 01:21:21,390 La R sta per la lettura, la w per la scrittura, 1104 01:21:21,390 --> 01:21:25,500 e il x, che non vi è presente, significa eseguire. 1105 01:21:25,500 --> 01:21:27,260 Ci sono 3 categorie di là. 1106 01:21:27,260 --> 01:21:33,540 Gli ultimi 3 elementi sono nella categoria di utenti. Coloro che si applicano a me, l'utente. 1107 01:21:33,540 --> 01:21:36,870 Questi 3 qui si applicano al gruppo. 1108 01:21:36,870 --> 01:21:41,590 Il file appartiene al gruppo 1, l'utente può appartenere a più gruppi, 1109 01:21:41,590 --> 01:21:47,150 ma se l'utente è nel gruppo a cui appartiene il file, 1110 01:21:47,150 --> 01:21:51,090 quindi queste protezioni si applicano a lui se non è l'utente. 1111 01:21:51,090 --> 01:21:54,230 E questo è chiunque altro. 1112 01:21:55,540 --> 01:21:57,690 Queste categorie si escludono a vicenda. 1113 01:21:57,690 --> 01:21:59,750 Le protezioni utente si applicano a lui, 1114 01:21:59,750 --> 01:22:03,780 le protezioni del gruppo si applicano ai membri del gruppo diverse dall'utente, 1115 01:22:03,780 --> 01:22:08,110 e le altre protezioni si applicano solo a persone diverse dall'utente ed i membri del gruppo. 1116 01:22:08,110 --> 01:22:12,320 Se c'è un r o aw o un x, significa che la protezione è concesso. 1117 01:22:12,320 --> 01:22:13,950 Se c'è un trattino, significa che non lo è. 1118 01:22:13,950 --> 01:22:16,690 In realtà ci sono altre cose che possono essere messi in qui oltre a questi, 1119 01:22:16,690 --> 01:22:18,350 che non voglio entrare adesso. 1120 01:22:18,350 --> 01:22:24,450 La umask definisce un valore predefinito per i file creati. 1121 01:22:24,450 --> 01:22:28,580 E come una maschera, in fondo si dice che i bit che non impostate. 1122 01:22:28,580 --> 01:22:30,450 Come è diventato questo bit? 1123 01:22:30,450 --> 01:22:33,240 Se si pensa di ciascuno di questi come un numero ottale, 1124 01:22:33,240 --> 01:22:42,120 questo è il bit 1s, questo è il 2s, questo è il 4s. 1125 01:22:42,120 --> 01:22:45,840 Così da 0 a 7 1126 01:22:45,840 --> 01:22:51,770 descriverà quale combinazione di R, W e X di che hai per questi 3 1127 01:22:51,770 --> 01:22:53,710 e quindi un numero simile per questi e poi per questi. 1128 01:22:53,710 --> 01:23:12,030 Quindi 022 significa 0 per altro, per il gruppo 2, 2 per l'utente. 1129 01:23:12,030 --> 01:23:15,870 Ma questa è una maschera. La maschera è quello che non hai. 1130 01:23:19,380 --> 01:23:20,610 Mi dispiace. Ho appena dato le cose nell'ordine sbagliato. 1131 01:23:20,610 --> 01:23:25,620 E 'la prima 3. Questi 3 sono l'utente, questi 3 sono il gruppo, questi 3 sono l'altro. 1132 01:23:25,620 --> 01:23:27,970 Ci dispiace che ti ho dato questi nell'ordine sbagliato. 1133 01:23:27,970 --> 01:23:31,910 Lo 0, che è il primo di quelli, non visualizza il valore, 1134 01:23:31,910 --> 01:23:35,430 ma se un numero non è lì, è uno 0. 1135 01:23:35,430 --> 01:23:38,370 Ciò significa che sarebbe stato concesso tutti e 3 di questi. 1136 01:23:38,370 --> 01:23:41,550 Si noti che in questo particolare la x non è consentito. 1137 01:23:41,550 --> 01:23:44,090 La ragione è che il guscio è in grado di determinare 1138 01:23:44,090 --> 01:23:46,260 se un file deve essere eseguito o meno. 1139 01:23:46,260 --> 01:23:49,800 Poiché questo non è un file eseguibile, non ha impostato la x. 1140 01:23:49,800 --> 01:23:54,000 I due mezzi che scrivono autorizzazione, la seconda categoria qui, 1141 01:23:54,000 --> 01:23:56,500 quello nel mezzo, è negato. 1142 01:23:56,500 --> 01:23:58,500 Quindi, di nuovo, queste sono le cose che ha negato. 1143 01:23:58,500 --> 01:24:02,080 Beh, x è consentito, ma non è qui perché non è eseguibile 1144 01:24:02,080 --> 01:24:04,260 e analogamente per gli altri. 1145 01:24:04,260 --> 01:24:08,880 Ecco, questo è un umask comune. 1146 01:24:08,880 --> 01:24:14,630 Un altro comune è 700 - darsi tutto e nessun altro nulla. 1147 01:24:14,630 --> 01:24:17,040 E ci sono altre possibilità. 1148 01:24:21,340 --> 01:24:27,110 Tornerò a quello. Utilizzando la storia posso cercare indietro per questo, LLA a lì. 1149 01:24:27,110 --> 01:24:30,210 Ok. Così qui, questi sono i gusci. 1150 01:24:30,210 --> 01:24:36,020 Bash, il proprietario, che è l'account di sistema, può fare tutto. 1151 01:24:36,020 --> 01:24:41,210 Gruppo e tutti gli altri possono fare di leggere o eseguire ma non scrivere. 1152 01:24:41,210 --> 01:24:44,570 Questo non ha nemmeno consentire al proprietario di scrivere ad esso. 1153 01:24:44,570 --> 01:24:46,460 Se il proprietario ha voluto scrivere su di esso, l'account di sistema, 1154 01:24:46,460 --> 01:24:48,020 avrebbe dovuto cambiare prima la protezione. 1155 01:24:48,020 --> 01:24:53,940 Ma ancora una volta, la umask imposta il default mascherarlo, 1156 01:24:53,940 --> 01:24:57,160 indicando i bit che non sono impostate. 1157 01:24:57,160 --> 01:25:04,380 Questo è in genere in uno dei file di inizializzazione, che è l'. Cshrc per la C-shell 1158 01:25:04,380 --> 01:25:07,500 o il profilo per le shell di tipo Bourne.. 1159 01:25:07,500 --> 01:25:12,520 Può essere altrove anche se ci sono altri file di inizializzazione del sistema. 1160 01:25:12,520 --> 01:25:14,610 Comunque, questo è umask. 1161 01:25:14,610 --> 01:25:18,180 C'è qualcosa di un po 'strano qui, 1162 01:25:18,180 --> 01:25:22,800 e che è, perché c'è un unico comando per questo? 1163 01:25:22,800 --> 01:25:28,690 Se dovessi scrivere questo, vorrei fare una variabile, umask = certo valore. 1164 01:25:28,690 --> 01:25:31,100 Perché c'è un comando intero solo per questo scopo? 1165 01:25:31,100 --> 01:25:34,560 La ragione è questa solo risale alle origini di Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix era solo un progetto di programmazione ai Bell Labs nei primi anni 1970. 1167 01:25:41,050 --> 01:25:42,610 La gente semplicemente si sono riuniti per il programma. 1168 01:25:42,610 --> 01:25:45,290 Non hanno mai destinato a diventare un sistema operativo a livello mondiale. 1169 01:25:45,290 --> 01:25:47,250 Diverse persone hanno scritto diverse parti senza pensarci molto 1170 01:25:47,250 --> 01:25:49,790 di come stavano andando per essere utilizzati - piuttosto impreciso. 1171 01:25:49,790 --> 01:25:53,290 E ne è venuto insieme come questo, ed è ancora così in alcuni aspetti. 1172 01:25:53,290 --> 01:25:57,930 In modo che riflette la storia, e ci sono ancora queste incongruenze e gli elementi dispari di esso. 1173 01:25:57,930 --> 01:26:00,750 Ok. Uno accanto qui. 1174 01:26:08,170 --> 01:26:11,000 Come ho scritto in precedenza, la C-shell non è usata molto per la programmazione, 1175 01:26:11,000 --> 01:26:12,420 anche se può essere. 1176 01:26:12,420 --> 01:26:15,080 Esegue più lentamente, di nuovo il trade-off tra l'uso interattivo, 1177 01:26:15,080 --> 01:26:17,820 che ha più di elaborazione coinvolti di velocità, 1178 01:26:17,820 --> 01:26:20,710 che può fare a meno della trasformazione. 1179 01:26:20,710 --> 01:26:28,320 Le caratteristiche supplementari aggiunte alla shell Bourne dalla Korn e Bourne-Again shell 1180 01:26:28,320 --> 01:26:32,120 Non sembra di rallentarli, e non so perché. 1181 01:26:32,120 --> 01:26:36,310 Potrebbe essere solo una migliore programmazione, ma io non sono in grado di sapere. 1182 01:26:36,310 --> 01:26:40,420 Accelerare qui in realtà non è un grande affare, anche se è menzionato. 1183 01:26:40,420 --> 01:26:43,690 La ragione è che gli script di shell effettivamente ottenere abbastanza veloce. 1184 01:26:43,690 --> 01:26:46,450 Se c'è un sacco di comandi come in un programma calculational, 1185 01:26:46,450 --> 01:26:49,110 probabilmente non farlo in uno script di shell. 1186 01:26:49,110 --> 01:26:51,450 Le operazioni sono abbastanza semplice e lineare. 1187 01:26:51,450 --> 01:26:53,960 Quelli che ho vissuto che sono troppo lenti 1188 01:26:53,960 --> 01:26:57,110 coinvolgere ripetute applicazioni di comandi lenti. 1189 01:26:57,110 --> 01:27:00,480 In precedenza ho accennato stream editor sed. Questo comando è lento. 1190 01:27:00,480 --> 01:27:03,760 Se si esegue sed molte volte, si otterrà uno script lento, ma non è il guscio che è lento. 1191 01:27:03,760 --> 01:27:07,920 L'esecuzione nella Bourne shell non sarà molto più veloce di esecuzione nel C-shell, 1192 01:27:07,920 --> 01:27:10,070 anche se non c'è forse alcuni vantaggi lì. 1193 01:27:10,070 --> 01:27:12,760 Le funzionalità di programmazione supplementari, invece, 1194 01:27:12,760 --> 01:27:17,920 sono ragioni importanti per cui si dovrebbe usare le shell di tipo Bourne. 1195 01:27:17,920 --> 01:27:21,390 C-shell ha caratteristiche dispari ad esso - 1196 01:27:21,390 --> 01:27:25,250 il fatto che non si sa se una variabile è una variabile shell o una variabile di ambiente. 1197 01:27:25,250 --> 01:27:27,440 Può essere molto confusa. 1198 01:27:27,440 --> 01:27:32,170 Non è così facile scrivere 1199 01:27:32,170 --> 01:27:35,930 solo sulla base di esperienza di programmazione in altre lingue. 1200 01:27:35,930 --> 01:27:41,350 Penso che si possono trovare le shell di tipo Bourne più coerente con la vostra esperienza. 1201 01:27:43,730 --> 01:27:49,270 Alcuni script, però, possono essere migliaia di righe di lunghezza. 1202 01:27:49,270 --> 01:27:52,450 Quelli che ho visto sono utilizzati per la patch dei sistemi operativi. 1203 01:27:52,450 --> 01:27:55,450 Quelli possono eseguire molto lentamente, ma non si esegue quelli molto spesso. 1204 01:27:55,450 --> 01:27:57,180 E 'solo quando si sta facendo patching, 1205 01:27:57,180 --> 01:27:59,450 ed è solo il responsabile del sistema che fa queste cose, 1206 01:27:59,450 --> 01:28:01,840 quindi non è davvero molto più di un problema. 1207 01:28:01,840 --> 01:28:06,980 Quelli che sono centinaia di linee lungo effettivamente execute abbastanza rapidamente. 1208 01:28:06,980 --> 01:28:10,540 Menzionare questo qui, quali sono questi miglioramenti? 1209 01:28:10,540 --> 01:28:13,170 Ho già detto alcuni di loro - Array, calcoli, 1210 01:28:13,170 --> 01:28:20,540 i $ () di espressione per i calcoli nella shell Bash, 1211 01:28:20,540 --> 01:28:23,050 l'altro tipo di sostituzione di comando. 1212 01:28:23,050 --> 01:28:25,360 Ci sono diversi tipi di comandi di prova 1213 01:28:25,360 --> 01:28:29,350 con cui è possibile fare dei test condizionali sull'esistenza di un file o di altre cose. 1214 01:28:29,350 --> 01:28:34,790 Ultimo qui, questo comando qui. 1215 01:28:34,790 --> 01:28:38,480 Cosa fa questo, e perché qualcuno dovrebbe usarlo? 1216 01:28:51,170 --> 01:28:52,990 variablename printenv. 1217 01:28:52,990 --> 01:28:56,130 Sappiamo cosa printenv fa. Ci dice il valore di una variabile. 1218 01:28:56,130 --> 01:29:00,850 E variablename printenv non ci dirà molto, perché non c'è tale variabile. 1219 01:29:03,550 --> 01:29:05,120 Blank. 1220 01:29:05,120 --> 01:29:08,440 Ma diamogli qualcosa di significativo. 1221 01:29:13,420 --> 01:29:16,800 Che non è neanche lì. Ok. Credo che non ho mai definito tale. 1222 01:29:16,800 --> 01:29:18,020 Diciamo solo controllare il mio ambiente. 1223 01:29:18,020 --> 01:29:20,900 Questo è un altro comando con il quale è possibile controllare il proprio ambiente. 1224 01:29:20,900 --> 01:29:24,470 Vi è una buona EDITOR vecchio, quello che abbiamo visto prima. 1225 01:29:42,360 --> 01:29:44,120 Che cosa fare? 1226 01:29:44,120 --> 01:29:48,050 Qui abbiamo una espressione backquote. 1227 01:29:48,050 --> 01:29:50,370 Ricordate che questa è la C-shell. 1228 01:29:50,370 --> 01:29:54,850 Così EDITOR printenv ci darà un valore di EDITOR. E 'vi. 1229 01:29:54,850 --> 01:29:59,790 E poi sarà impostare tale valore alla variabile a, il comando set. 1230 01:29:59,790 --> 01:30:02,860 Così ora se faccio echo $ a, ottengo vi. 1231 01:30:02,860 --> 01:30:05,850 Non mi sembra terribilmente utile. 1232 01:30:05,850 --> 01:30:08,080 Tuttavia, ha in realtà avere uno scopo. 1233 01:30:08,080 --> 01:30:12,260 Dal momento che non sappiamo se una variabile è una variabile shell o una variabile d'ambiente 1234 01:30:12,260 --> 01:30:16,280 utilizzando la sintassi di valutazione simbolo del dollaro, possiamo usare printenv 1235 01:30:16,280 --> 01:30:19,460 per assicurarsi che si tratta di una variabile di ambiente. 1236 01:30:19,460 --> 01:30:22,550 Quindi, se ci fosse un editor di variabili di shell, ciò non avrebbe ottenuto esso. 1237 01:30:22,550 --> 01:30:25,640 Questo funziona solo con la variabile di ambiente. 1238 01:30:25,640 --> 01:30:28,370 Se ci fosse una variabile di shell e io volevo il suo valore, 1239 01:30:28,370 --> 01:30:29,980 Avrei dovuto trovare un altro modo per farlo. 1240 01:30:29,980 --> 01:30:33,530 Un modo per farlo sarebbe da fare insieme e tubazioni. 1241 01:30:33,530 --> 01:30:36,130 Questo è uno dei metacaratteri, caratteri speciali. 1242 01:30:36,130 --> 01:30:38,370 Si invia l'output di set a qualcos'altro. 1243 01:30:38,370 --> 01:30:40,650 Vediamo cosa potremmo trovare lì. 1244 01:30:40,650 --> 01:30:49,340 Niente. Ok. Diciamo solo vedere cosa c'è dentro tutti insieme. 1245 01:30:49,340 --> 01:30:53,580 Era echo_style, quello che ho detto prima. Va bene, facciamolo. 1246 01:31:02,460 --> 01:31:06,230 Ricorda ho detto prima, echo_style 1247 01:31:06,230 --> 01:31:08,410 determina il modo in cui verrà eseguito il comando echo. 1248 01:31:08,410 --> 01:31:10,940 bsd sta per Berkeley Standard Distribution. 1249 01:31:10,940 --> 01:31:13,200 Questo è il Berkeley Unix dal 1970. 1250 01:31:13,200 --> 01:31:16,630 Questo è uno dei modi che riecheggiano in grado di eseguire. 1251 01:31:16,630 --> 01:31:22,310 Impostazione echo_style a quel valore nel TC-shell farà eco a comportarsi in quel modo. 1252 01:31:22,310 --> 01:31:27,670 Così set che fa, ma impostare ottiene solo variabili di shell. 1253 01:31:27,670 --> 01:31:35,430 Non sarebbe trovare Editor, che non è una variabile di shell. 1254 01:31:36,870 --> 01:31:38,050 Niente. 1255 01:31:38,050 --> 01:31:39,660 Ecco, questo è un modo di distinguerli. 1256 01:31:39,660 --> 01:31:42,000 Ma il fatto che si deve passare attraverso qualche strana comando simile 1257 01:31:42,000 --> 01:31:45,500 distinguere tra variabili di shell o variabili d'ambiente 1258 01:31:45,500 --> 01:31:49,970 mostra il tipo di natura pratico della C-shell per alcuni scopi. 1259 01:31:52,290 --> 01:31:57,960 E ora, l'ultima e forse meno, questo è le pagine man. 1260 01:31:57,960 --> 01:32:03,190 Quelli di chi si può sapere, l'uomo è breve comando di manuale. 1261 01:32:03,190 --> 01:32:08,610 Le pagine man per i gusci sono difficili da leggere. Sono molto lungo. 1262 01:32:08,610 --> 01:32:14,060 Sono organizzati in un modo che può rendere difficile trovare quello che stai cercando. 1263 01:32:14,060 --> 01:32:15,980 Quindi, se siete alla ricerca di qualcosa con uno scopo, 1264 01:32:15,980 --> 01:32:20,050 Non si può sapere se tale scopo è una variabile di shell o qualcos'altro, 1265 01:32:20,050 --> 01:32:21,630 quindi non si può sapere dove cercarlo. 1266 01:32:21,630 --> 01:32:25,030 È possibile cercare varie stringhe, ma le stringhe sono spesso ripetuta. 1267 01:32:25,030 --> 01:32:27,640 Quindi è generalmente difficile da leggere. 1268 01:32:27,640 --> 01:32:33,810 Abbiamo appena guardato la pagina man TC-guscio un po 'prima di trovare il comando eval. 1269 01:32:33,810 --> 01:32:36,610 Alcune cose vanno più veloci. 1270 01:32:36,610 --> 01:32:38,860 Un approccio è quello di cercare una stringa. 1271 01:32:38,860 --> 01:32:40,360 È possibile utilizzare il cercapersone. 1272 01:32:40,360 --> 01:32:49,080 Cercapersone ha la barra per cercare un comando o una stringa all'interno di una operazione di cercapersone. 1273 01:32:49,080 --> 01:32:52,830 Uomo di default userà cercapersone, sia più o meno. 1274 01:32:52,830 --> 01:32:56,560 Non so se si ha familiarità con quelli, ma quelli in grado di visualizzare i file, bit per bit. 1275 01:32:56,560 --> 01:33:00,550 Sto usando MENO per visualizzare questi file particolari che abbiamo qui. 1276 01:33:00,550 --> 01:33:03,300 È possibile cercare là dentro. 1277 01:33:03,300 --> 01:33:04,880 È possibile provare a utilizzare diverse stringhe di ricerca. 1278 01:33:04,880 --> 01:33:08,420 Anche le pagine man in diversi sistemi operativi possono non essere gli stessi. 1279 01:33:08,420 --> 01:33:11,130 Possono essere pagine separate per csh e tcsh. 1280 01:33:11,130 --> 01:33:14,500 Sono non sono sul Mac, ma potrebbero essere se queste sono comandi separati. 1281 01:33:14,500 --> 01:33:19,000 Se sh in realtà non chiama Bash, probabilmente ci sarebbe una pagina man separata. 1282 01:33:19,000 --> 01:33:25,820 Alcuni sistemi hanno pagine man separati solo per i comandi incorporati in C-shell. 1283 01:33:25,820 --> 01:33:30,250 A volte, se si vuole leggere una descrizione di un comando built-in 1284 01:33:30,250 --> 01:33:35,350 che è anche nel percorso, come eco, è necessario leggere la pagina man su quel comando su echo 1285 01:33:35,350 --> 01:33:37,610 per determinare come funzionerà come un comando incorporato 1286 01:33:37,610 --> 01:33:39,760 anche se non stai chiamando il comando built-in. 1287 01:33:41,630 --> 01:33:46,090 Questo è un inconveniente del sistema operativo in generale, non solo per le conchiglie, 1288 01:33:46,090 --> 01:33:50,710 anche se per i gusci in particolare alle pagine man sono piuttosto lunghi, 1289 01:33:50,710 --> 01:33:56,180 in parte perché hanno aggiunto caratteristiche utili per loro, che può essere un positivo. 1290 01:33:56,180 --> 01:34:00,290 Ok. Ci sono domande? Eventuali argomenti che si desidera far apparire? 1291 01:34:00,290 --> 01:34:03,390 Nulla di rilevante qui? 1292 01:34:04,540 --> 01:34:07,100 Beh, è ​​stato molto bello parlare a tutti voi. 1293 01:34:07,100 --> 01:34:09,690 Spero che tu hai qualcosa di questo seminario 1294 01:34:09,690 --> 01:34:13,080 che sarà utile per voi nei vostri sforzi futuri. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]