1 00:00:00,000 --> 00:00:02,320 >> [Séminaire - shells Unix, les environnements] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [C'est CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Le sujet d'aujourd'hui est le shell Unix. 5 00:00:12,770 --> 00:00:20,600 Je suis Douglas Kline, expert, ou au moins raisonnablement utilisateur compétente, de la coque. 6 00:00:20,600 --> 00:00:25,280 Une coque est l'interface pour l'utilisateur de système d'exploitation de l'ordinateur. 7 00:00:25,280 --> 00:00:29,580 Le nom est trompeur car, contrairement à la coque d'un animal, 8 00:00:29,580 --> 00:00:34,890 ce qui est difficile et de protection, l'enveloppe de l'ordinateur permet la communication. 9 00:00:34,890 --> 00:00:39,120 Donc membrane poreuse serait probablement une meilleure métaphore. 10 00:00:39,120 --> 00:00:44,500 >> La coque d'origine pour Unix est le shell Bourne. 11 00:00:44,500 --> 00:00:46,450 Bourne est orthographié B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne était l'un des auteurs originaux de Unix, 13 00:00:49,770 --> 00:00:51,700 et si la coquille est nommé d'après lui. 14 00:00:51,700 --> 00:00:54,850 Le nom de cette coquille comme une commande est tout simplement sh. 15 00:00:54,850 --> 00:00:57,400 C'est la commande que vous pouvez exécuter. 16 00:00:57,400 --> 00:01:00,810 La coque commence à la connexion. 17 00:01:00,810 --> 00:01:04,459 Lorsque vous vous connectez à l'ordinateur, la coquille commence juste courir pour vous, 18 00:01:04,459 --> 00:01:06,820 et c'est ce que prend vos commandes. 19 00:01:06,820 --> 00:01:09,790 Il peut commencer à d'autres moments également. 20 00:01:09,790 --> 00:01:16,780 Si vous apportez une fenêtre sans autre indication, il va commencer une coquille pour vous. 21 00:01:16,780 --> 00:01:20,450 C'est comme ça, c'est que vous pouvez aller à une fenêtre et commencer à taper des commandes 22 00:01:20,450 --> 00:01:23,960 et ainsi de suite là, même si vous n'avez pas connectez à cette fenêtre. 23 00:01:23,960 --> 00:01:26,670 En outre, si vous faites une connexion à distance, 24 00:01:26,670 --> 00:01:30,250 alors il va lancer un shell sur l'ordinateur distant. 25 00:01:30,250 --> 00:01:44,310 Et il est possible d'exécuter des commandes sans un shell interactif. 26 00:01:44,310 --> 00:01:48,990 Cela peut signifier au sein de votre opération en cours, 27 00:01:48,990 --> 00:01:50,700 et il peut aussi signifier une opération à distance. 28 00:01:50,700 --> 00:01:52,900 Vous pouvez envoyer une commande à un autre ordinateur, 29 00:01:52,900 --> 00:01:55,460 qui comprend le démarrage d'un interpréteur de commandes. 30 00:01:55,460 --> 00:01:57,760 En effet, elle doit comporter le démarrage d'une coquille y 31 00:01:57,760 --> 00:02:01,740 même si ce n'est pas votre but final. 32 00:02:05,310 --> 00:02:12,350 Quand quelque chose commence comme ça, il ne démarre pas nécessairement un nouveau shell. 33 00:02:12,350 --> 00:02:17,430 Si vous apportez une nouvelle fenêtre, il est possible de dire pour faire apparaître un éditeur 34 00:02:17,430 --> 00:02:18,940 ou une autre commande. 35 00:02:18,940 --> 00:02:20,560 Dans ce cas, l'éditeur va commencer à partir de zéro. 36 00:02:20,560 --> 00:02:22,930 Lorsque l'éditeur se termine, la fenêtre se termine. 37 00:02:22,930 --> 00:02:24,620 C'est un peu inhabituel, mais il peut être fait. 38 00:02:24,620 --> 00:02:27,140 Dans ces cas, il ne sera pas une coque. 39 00:02:27,140 --> 00:02:31,890 Donc ce n'est pas nécessairement le cas que d'une fenêtre ou d'une telle demande seront ouvrir un shell. 40 00:02:31,890 --> 00:02:34,030 >> Shell analyse les commandes. 41 00:02:34,030 --> 00:02:40,900 Analyse des moyens d'identifier les différents éléments et de les classer. 42 00:02:40,900 --> 00:02:43,470 Dans une commande, la chaîne complète que vous tapez, 43 00:02:43,470 --> 00:02:47,310 il y aura une ou plusieurs commandes simples à exécuter. 44 00:02:47,310 --> 00:02:50,050 D'autres éléments peuvent être des arguments. 45 00:02:50,050 --> 00:02:55,020 Il peut aussi y avoir des caractères spéciaux qui affectent l'exécution d'une commande. 46 00:02:55,020 --> 00:02:59,710 Ils peuvent envoyer la sortie ailleurs que l'écran 47 00:02:59,710 --> 00:03:01,750 si la commande devrait normalement envoyer à l'écran. 48 00:03:01,750 --> 00:03:04,390 Il peut rediriger l'entrée, il peut faire d'autres choses aussi. 49 00:03:04,390 --> 00:03:08,120 Il existe divers autres symboles, caractères, etc. 50 00:03:08,120 --> 00:03:13,600 Analyse consiste à détecter et interpréter les choses. 51 00:03:13,600 --> 00:03:19,560 >> Maintenant, si il n'y a plus de questions, ce qui est assez probable car il n'y a pas plus de gens, 52 00:03:19,560 --> 00:03:24,620 nous allons passer à ma page suivante ici. 53 00:03:24,620 --> 00:03:29,170 >> J'ai déjà dit que le shell Bourne est l'enveloppe initiale. 54 00:03:29,170 --> 00:03:31,550 Il existe d'autres. 55 00:03:31,550 --> 00:03:34,520 L'un est le C-shell. La commande est csh. 56 00:03:34,520 --> 00:03:36,830 Le nom C-shell est juste un jeu de mots. 57 00:03:36,830 --> 00:03:41,260 Cette coquille a été introduit avec l'Unix de Berkeley dans les années 1970. 58 00:03:41,260 --> 00:03:44,830 Unix de Berkeley était un événement majeur dans le développement d'Unix. 59 00:03:44,830 --> 00:03:48,770 Ce fut une révolution énorme et comprenait l'introduction de cette coquille. 60 00:03:48,770 --> 00:03:50,790 La raison pour que le jeu de mots, C-shell, 61 00:03:50,790 --> 00:03:56,490 est que le C-shell a quelques caractéristiques en ce qui ressemblent le langage C, 62 00:03:56,490 --> 00:03:59,740 qui le shell Bourne n'a pas - 63 00:03:59,740 --> 00:04:02,140 ou il n'a pas eu à ce moment-là. 64 00:04:02,140 --> 00:04:05,190 Il ya aussi le TC-shell. 65 00:04:05,190 --> 00:04:07,360 Il s'agit d'un sur-ensemble du C-shell. 66 00:04:07,360 --> 00:04:11,470 Il a des caractéristiques additionnelles, dont beaucoup sont utiles pour un usage interactif, 67 00:04:11,470 --> 00:04:16,050 telles que les commandes en rappelant le mécanisme d'historique, 68 00:04:16,050 --> 00:04:18,459 que je vais vous décrire un peu plus tard - 69 00:04:18,459 --> 00:04:23,120 d'une manière simple, sur le modèle d'un éditeur. 70 00:04:23,120 --> 00:04:29,170 Il a également des liaisons qui permettent de lier une chaîne de clé court pour une commande plus. 71 00:04:29,170 --> 00:04:31,440 Nous n'allons pas être d'entrer dans qu'aujourd'hui. 72 00:04:31,440 --> 00:04:33,650 Il a quelques fonctionnalités qui sont utiles pour la programmation. 73 00:04:33,650 --> 00:04:37,020 Cependant, le C-shell n'est pas souvent utilisé pour la programmation shell. 74 00:04:37,020 --> 00:04:39,080 Programmes Shell, si vous ne le saviez pas déjà, 75 00:04:39,080 --> 00:04:41,690 sont des programmes qui consistent en des caractéristiques de la coquille. 76 00:04:41,690 --> 00:04:43,220 Vous pouvez exécuter ces programmes comme. 77 00:04:43,220 --> 00:04:46,760 Vous écrivez un tas de commandes shell dans un fichier et d'exécuter le fichier. 78 00:04:46,760 --> 00:04:49,760 Vous n'avez pas besoin de le compiler. C'est un langage interprété. 79 00:04:49,760 --> 00:04:57,320 L'expression C-shell est maintenant ambigu, car il pourrait se référer uniquement à la C-shell original, csh, 80 00:04:57,320 --> 00:05:01,200 ou à tous les C-coquilles, y compris tcsh. C'est un peu ambigu. 81 00:05:01,200 --> 00:05:08,250 >> Une coquille plus tard est le shell Korn, ksh, nommé d'après le programmeur, Korn. 82 00:05:08,250 --> 00:05:14,160 Cette coquille a tenté d'incorporer dans une enveloppe 83 00:05:14,160 --> 00:05:16,960 les avantages de l'extrémité C-coquille pour une utilisation interactive 84 00:05:16,960 --> 00:05:19,230 et le shell Bourne pour la programmation. 85 00:05:19,230 --> 00:05:25,440 Il a été utilisé comme un shell interactif par certaines personnes - une minorité. 86 00:05:25,440 --> 00:05:32,050 Plus tard, cependant, il y avait une autre introduction, le shell Bash, BASH, 87 00:05:32,050 --> 00:05:35,290 encore un jeu de mots, shell Bourne-Again. 88 00:05:35,290 --> 00:05:43,830 C'est une extension de la Bourne shell. Korn est également. Deux d'entre eux. 89 00:05:43,830 --> 00:05:48,100 Il a les mêmes objectifs de Korn shell de la fusion de la C-shell 90 00:05:48,100 --> 00:05:50,980 et avantages Bourne shell dans une enveloppe. 91 00:05:50,980 --> 00:05:56,810 Beaucoup des améliorations de Korn sont également inclus dans Bash. 92 00:05:56,810 --> 00:06:00,710 Bash, cependant, a plus et il est donc préférable. 93 00:06:00,710 --> 00:06:05,180 Le shell Bourne-Again et le shell Korn sont appelés coquilles Bourne type 94 00:06:05,180 --> 00:06:07,730 parce qu'ils comprennent des caractéristiques de la Bourne shell, 95 00:06:07,730 --> 00:06:11,180 qui sont incompatibles à certains égards, avec C-coquilles. 96 00:06:11,180 --> 00:06:15,520 Il existe d'autres coquilles en plus de ceux, certains destinés à un usage restreint, 97 00:06:15,520 --> 00:06:20,670 peut-être limité à certaines commandes, peut-être des fins spécialisées, pas souvent utilisés. 98 00:06:20,670 --> 00:06:24,240 >> Okay. Article suivant ici. 99 00:06:31,300 --> 00:06:38,970 Le shell Bash est devenu associé à diverses formes de Linux. 100 00:06:38,970 --> 00:06:41,550 Je ne sais pas si c'est vrai de toutes les formes. 101 00:06:41,550 --> 00:06:43,280 Il existe de nombreuses formes là-bas et je ne les ai pas tous utilisés, 102 00:06:43,280 --> 00:06:46,870 mais dans ceux que j'ai utilisé il est devenu associé avec elle. 103 00:06:46,870 --> 00:06:49,670 Autant que je sache, il n'y a rien Bash 104 00:06:49,670 --> 00:06:52,210 ce qui le rend plus compatible avec Linux 105 00:06:52,210 --> 00:06:55,020 que toute autre combinaison de coquille et un système d'exploitation. 106 00:06:55,020 --> 00:06:59,690 Je pense que cela reflète probablement les inclinaisons des programmeurs. 107 00:06:59,690 --> 00:07:07,500 Qu'il est devenu associé avec Linux est une autre raison de préférer Bash ksh 108 00:07:07,500 --> 00:07:11,820 puisque les choses sont susceptibles d'être écrite en elle et c'est susceptible de se propager. 109 00:07:11,820 --> 00:07:15,410 Je vais vous donner d'autres raisons pour que plus tard. 110 00:07:15,410 --> 00:07:21,330 Scripts shell Bourne doivent s'exécuter sous le shell Korn ou bash. 111 00:07:21,330 --> 00:07:22,650 Si vous écrivez quelque chose pour le shell Bourne, 112 00:07:22,650 --> 00:07:26,180 vous pouvez probablement l'exécuter sous ksh ou bash. 113 00:07:26,180 --> 00:07:30,610 Korn scripts shell sera probablement fonctionner sous Bash, mais je ne peux pas le garantir. 114 00:07:30,610 --> 00:07:36,040 Plus tard ici, son C-shell doivent s'exécuter sous le TC-shell. 115 00:07:38,850 --> 00:07:41,690 Le C-shell a été fait jamais beaucoup utilisé pour les scripts 116 00:07:41,690 --> 00:07:48,110 depuis le shell Bourne et plus tard, les coquilles de type Bourne était préférable à cet effet. 117 00:07:48,110 --> 00:07:50,620 Donc, ce n'est pas vraiment tout ce qui importe. 118 00:07:50,620 --> 00:07:53,480 Il ya beaucoup de scripts shell Bourne qui ont été écrites il ya longtemps, 119 00:07:53,480 --> 00:07:56,860 avant que le shell Korn ou Bourne Again Shell ont été introduites. 120 00:07:56,860 --> 00:07:59,300 Ce sont encore en usage, une partie des systèmes d'exploitation, 121 00:07:59,300 --> 00:08:01,590 et vous les trouverez si vous regardez dans le système d'exploitation 122 00:08:01,590 --> 00:08:03,760 ou certains anciens paquets de programmation. 123 00:08:03,760 --> 00:08:12,840 >> Bash est dans une certaine mesure de devenir une sorte de lingua franca pour les systèmes d'exploitation. 124 00:08:12,840 --> 00:08:17,580 Il a déjà été étendu à Windows et VMS. 125 00:08:17,580 --> 00:08:20,440 VMS, au cas où vous ne savez pas, est un système d'exploitation propriétaire 126 00:08:20,440 --> 00:08:25,480 de Digital Equipment Corporation, qui est encore en usage, en grande partie dans les coulisses. 127 00:08:25,480 --> 00:08:29,250 Et si ça va être exécuté sur plusieurs systèmes d'exploitation différents, 128 00:08:29,250 --> 00:08:31,110 probable que les gens ont tendance à passer pour elle. 129 00:08:31,110 --> 00:08:33,840 Mais cette évolution est relativement récente. 130 00:08:33,840 --> 00:08:39,490 Il ne fait que commencer, donc je ne peux pas prédire si ce sera s'avérer vraiment ce genre de lingua franca. 131 00:08:39,490 --> 00:08:43,539 Aussi, parce que les chemins d'accès de fichiers et les bibliothèques diffèrent 132 00:08:43,539 --> 00:08:46,210 entre ces différents systèmes d'exploitation, 133 00:08:46,210 --> 00:08:50,250 vous pourriez ne pas être capable d'écrire un script Bash sur un système d'exploitation 134 00:08:50,250 --> 00:08:51,840 et ensuite l'exécuter sur un autre. 135 00:08:51,840 --> 00:08:54,440 Vous devriez être capable de le déplacer entre les différents Unix, Linux 136 00:08:54,440 --> 00:08:59,020 Les systèmes d'exploitation Mac OS, mais pas nécessairement pour Windows ou VMS. 137 00:08:59,020 --> 00:09:01,390 Vous pourriez avoir à modifier les descriptions fichier de chemin d'accès, 138 00:09:01,390 --> 00:09:03,180 et certaines bibliothèques peuvent être différents, 139 00:09:03,180 --> 00:09:05,230 ce qui peut affecter la façon dont certaines des commandes fonctionnent 140 00:09:05,230 --> 00:09:09,730 ou comment ils traitent les arguments, etc. 141 00:09:09,730 --> 00:09:19,230 En plus de cela, une autre mise en garde ici est qu'il n'y a aucune garantie 142 00:09:19,230 --> 00:09:23,570 que toutes les différentes coquilles que j'ai mentionnés - Bourne shell, C-shell, 143 00:09:23,570 --> 00:09:29,880 TC-shell, Korn shell, Bourne Again Shell - sera disponible sous tous les Unix 144 00:09:29,880 --> 00:09:33,750 ou Linux ou Mac OS. 145 00:09:33,750 --> 00:09:35,620 Ils pourraient tout simplement pas être là. 146 00:09:35,620 --> 00:09:38,300 C'est l'une des mises en garde ici. 147 00:09:38,300 --> 00:09:41,490 Il s'agit d'une limitation regrettable ici puisque vous voulez que les choses fonctionnent partout, 148 00:09:41,490 --> 00:09:44,380 mais malheureusement, vous ne pouvez pas compter sur cela. 149 00:09:44,380 --> 00:09:47,230 >> Okay. Suivant un ici. 150 00:09:50,280 --> 00:09:54,370 Disons que vous voulez écrire un script shell, 151 00:09:54,370 --> 00:09:57,170 un programme composé de commandes shell. 152 00:09:57,170 --> 00:10:01,200 Vous écrivez vos commandes, de les mettre dans un fichier, et exécutez le fichier. 153 00:10:01,200 --> 00:10:04,230 Que faire si vous voulez inclure des arguments? 154 00:10:04,230 --> 00:10:09,650 Dans le cas des opérations de coquille, les arguments sont les paramètres ou les paramètres positionnels 155 00:10:09,650 --> 00:10:15,940 et ils vont être appelés par un signe de dollar et un chiffre, de 1 $, 2 $. 156 00:10:15,940 --> 00:10:27,000 Donc, si le script a ce nom, mon premier argument pourrait être l'argument 1 157 00:10:27,000 --> 00:10:30,540 et mon second pourrait être l'argument 2, 158 00:10:30,540 --> 00:10:34,110 et à l'intérieur de mon script si je veux faire référence à ces choses - 159 00:10:34,110 --> 00:10:36,810 nous allons effacer ce que je ne vais pas vraiment pour l'exécuter - 160 00:10:36,810 --> 00:10:42,160 dans mon script, je pourrais avoir 1 $ à se référer à arg1, 161 00:10:42,160 --> 00:10:45,890 2 $, qui sortira de cette façon, arg2. 162 00:10:45,890 --> 00:10:50,080 Donc, ces symboles sont disponibles pour se référer à des arguments, 163 00:10:50,080 --> 00:10:52,390 et ceux qui s'appliquent à l'ensemble des coquilles. 164 00:10:52,390 --> 00:10:56,520 En outre, il existe d'autres caractères. 165 00:10:56,520 --> 00:11:01,700 $ * Se réfère à la liste des arguments ensemble, chacun d'eux. 166 00:11:01,700 --> 00:11:05,390 $ # Désigne le nombre d'arguments. 167 00:11:05,390 --> 00:11:07,910 Encore une fois, cela s'applique à toutes les coquilles. 168 00:11:07,910 --> 00:11:15,540 Ces symboles, * et #, peuvent être utilisés avec les significations dans d'autres endroits également. 169 00:11:15,540 --> 00:11:17,940 Nous n'aurons pas à cela. 170 00:11:17,940 --> 00:11:20,460 >> Shell ligne de prescripteur. Qu'est-ce que c'est ça? 171 00:11:20,460 --> 00:11:27,760 Disons que vous avez écrit un script et c'est un shell particulier et que vous voulez exécuter. 172 00:11:27,760 --> 00:11:33,500 Comment savez-vous ce que la coquille de votre système d'exploitation utilisera pour exécuter le script? 173 00:11:33,500 --> 00:11:37,230 A un moment, vous pourriez penser que ce serait aller dans le shell Bourne 174 00:11:37,230 --> 00:11:39,440 si vous n'avez pas dit autrement, 175 00:11:39,440 --> 00:11:41,730 mais les gens ne sont pas en train d'écrire des scripts dans le shell Bourne que beaucoup plus 176 00:11:41,730 --> 00:11:43,750 et vous ne pouvez même plus compter sur cela. 177 00:11:43,750 --> 00:11:48,740 Nous avons donc ici une ligne de spécification de la coquille ici. 178 00:11:48,740 --> 00:11:52,450 Qui spécifie Bash. 179 00:11:52,450 --> 00:11:56,750 Notez qu'il précise dans le chemin, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Si un ordinateur a le shell Bash, mais pas dans le répertoire bin, / bin, cela ne fonctionnera pas. 181 00:12:02,870 --> 00:12:06,870 C'est un autre qualificatif, un autre prudence ici. 182 00:12:06,870 --> 00:12:09,500 Le signe dièse est le caractère commentaire en ligne. 183 00:12:09,500 --> 00:12:12,300 Cela vaut pour tous les shells. 184 00:12:12,300 --> 00:12:18,610 Le cas particulier ici, #! au début d'un scénario, est un cas particulier. 185 00:12:18,610 --> 00:12:23,410 Qui spécifie la coquille dans laquelle pour exécuter le script. 186 00:12:23,410 --> 00:12:30,230 Comme je le disais, il pourrait ne pas être au même endroit / bin. 187 00:12:30,230 --> 00:12:34,880 En outre, il ya autre chose ici. 188 00:12:34,880 --> 00:12:41,250 Si vous venez d'utiliser le signe dièse sans point d'exclamation et le chemin, 189 00:12:41,250 --> 00:12:44,640 qui devrait indiquer un C-shell. 190 00:12:44,640 --> 00:12:48,300 Cependant, je ne recommande pas le faire parce que je ne suis pas en mesure de garantir 191 00:12:48,300 --> 00:12:49,750 que cela fonctionnera toujours. 192 00:12:49,750 --> 00:12:52,220 Si vous voulez un C-shell, il serait préférable de le dire. 193 00:12:52,220 --> 00:12:58,450 Ensuite, il ya quelque chose d'assez déroutant ici. 194 00:12:58,450 --> 00:13:03,940 Si vous utilisez une ligne enveloppe de spécification tels que / bin / bash 195 00:13:03,940 --> 00:13:07,070 et que la coquille n'est pas disponible là-bas, 196 00:13:07,070 --> 00:13:10,680 il n'y a pas une telle chose comme / bin / bash sur cet ordinateur particulier, 197 00:13:10,680 --> 00:13:14,330 soit parce qu'il n'a pas encore Bash ou parce que c'est dans un endroit différent, 198 00:13:14,330 --> 00:13:17,450 vous obtiendrez une erreur indiquant qu'il n'existe pas le script exécuté. 199 00:13:17,450 --> 00:13:21,510 Et bien sûr, votre script existe, de sorte que le message d'erreur est source de confusion. 200 00:13:21,510 --> 00:13:24,810 La raison pour laquelle le système d'exploitation qui vous donne cette erreur 201 00:13:24,810 --> 00:13:28,370 ou, plus précisément, que votre shell interactif dans lequel vous exécutez ce qui donne cette erreur, 202 00:13:28,370 --> 00:13:33,510 est qu'il indique la commande que vous avez utilisé, qui est le nom du script. 203 00:13:33,510 --> 00:13:36,920 Cette commande effectivement appelé la coquille par le nom du script. 204 00:13:36,920 --> 00:13:39,330 C'est là que vous obtenez ce message d'erreur à confusion. 205 00:13:39,330 --> 00:13:42,980 Une autre façon d'appeler script shell 206 00:13:42,980 --> 00:13:45,910 est en spécifiant la coque sur la ligne de commande, comme ici. 207 00:13:45,910 --> 00:13:52,510 Il s'agit d'une commande. Cela en dit courir Bash puis exécutez mon script Bash. 208 00:13:52,510 --> 00:13:55,680 Qui aura préséance sur une ligne de prescripteur, 209 00:13:55,680 --> 00:14:02,090 ce qui a pour fonction de vous permettre de fournir des chemins d'accès différents. 210 00:14:02,090 --> 00:14:04,840 Si vous venez de donner une commande, le système d'exploitation va chercher cette commande 211 00:14:04,840 --> 00:14:06,410 en divers endroits. 212 00:14:06,410 --> 00:14:08,820 S'il est disponible, il devrait le trouver. 213 00:14:08,820 --> 00:14:12,290 L'ordinateur va trouver Bash où il se trouve et de l'exécuter, 214 00:14:12,290 --> 00:14:15,470 vous n'avez donc pas besoin alors d'être préoccupé par où il le trouve. 215 00:14:15,470 --> 00:14:17,360 Il ya potentiellement d'autres préoccupations ici, 216 00:14:17,360 --> 00:14:20,830 comme s'il n'y avait plus de 1 version de Bash, ce qui est possible bien que peu probable. 217 00:14:20,830 --> 00:14:23,540 C'est donc une autre façon de traiter avec ces choses. 218 00:14:23,540 --> 00:14:30,480 lignes de Prescription peuvent appeler n'importe quel shell. 219 00:14:30,480 --> 00:14:34,480 Ils peuvent également appeler les choses autres que des coquilles. 220 00:14:34,480 --> 00:14:37,940 Exemples j'ai ici sont SED, qui est l'éditeur de flux; 221 00:14:37,940 --> 00:14:39,900 awk, qui est un langage de traitement de motifs; 222 00:14:39,900 --> 00:14:43,680 et perl, un langage de script très développé. 223 00:14:43,680 --> 00:14:47,570 Si vous mettez une ligne de spécification indiquant un de ces programmes au début, 224 00:14:47,570 --> 00:14:51,270 il ira directement à ce programme plutôt que de partir d'un shell. 225 00:14:51,270 --> 00:14:54,030 Ces programmes ont des limites à leurs capacités. 226 00:14:54,030 --> 00:14:58,790 Perl est très capable. Sed est un éditeur. Il peut faire des choses au-delà de l'édition simple. 227 00:14:58,790 --> 00:15:03,300 Mais il peut être difficile de programmer que. 228 00:15:03,300 --> 00:15:09,670 En outre, le passage d'arguments et d'autres choses à script est soit impossible, soit source de confusion. 229 00:15:09,670 --> 00:15:15,030 Donc, dans ces cas, avec awk ou sed, c'est, au moins dans mon expérience, 230 00:15:15,030 --> 00:15:18,910 préférable d'écrire un script et appel awk shell ou sed du script shell 231 00:15:18,910 --> 00:15:24,660 plutôt que d'appeler awk ou sed comme la ligne de script de spécification. 232 00:15:24,660 --> 00:15:26,980 Perl est un langage très diversifié, comme je le disais. 233 00:15:26,980 --> 00:15:30,050 Vous ne pouvez pas exécuter des commandes interactives en perl, 234 00:15:30,050 --> 00:15:32,660 ce qui signifie que vous ne pouvez pas tester les pièces de son exécution que vous êtes en développement 235 00:15:32,660 --> 00:15:33,970 en les exécutant de manière interactive. 236 00:15:33,970 --> 00:15:36,160 Cependant, il est un langage extrêmement capable 237 00:15:36,160 --> 00:15:40,960 et a développé un outil très largement utilisé. 238 00:15:40,960 --> 00:15:45,720 C'est juste un peu d'une parenthèse sur les lignes de spécification. 239 00:15:45,720 --> 00:15:50,610 >> Dans tous ou la plupart des formes de Linux - encore une fois, je ne peux pas être certain que c'est tout - 240 00:15:50,610 --> 00:15:57,900 et dans Mac OS, si vous tapez csh vous obtenez tcsh, 241 00:15:57,900 --> 00:16:00,570 et si vous tapez sh vous obtenez bash. 242 00:16:00,570 --> 00:16:05,020 Ils y ont essayé de vous donner les versions plus avancées de ces coquilles, 243 00:16:05,020 --> 00:16:07,940 mais cela peut être déroutant. 244 00:16:07,940 --> 00:16:16,720 Si vous écrivez un script utilisant tcsh ou Bash fonctionnalités tout en appelant csh ou sh 245 00:16:16,720 --> 00:16:22,230 et puis essayez d'exécuter sur un ordinateur qui n'a pas tcsh ou Bash, 246 00:16:22,230 --> 00:16:25,050 vous pourriez avoir quelques erreurs si il existe des commandes là 247 00:16:25,050 --> 00:16:27,970 ces obus qui ne reconnaissent pas. 248 00:16:27,970 --> 00:16:34,120 En outre, vous avez appelé votre shell sur votre ordinateur local 249 00:16:34,120 --> 00:16:37,700 appelant comme sh ou csh et puis obtenir les coquilles les plus avancés. 250 00:16:37,700 --> 00:16:41,440 Vous pouvez même pas penser du fait que vous utilisez le shell plus avancé. 251 00:16:41,440 --> 00:16:45,670 Donc, c'est un piège potentiel. 252 00:16:45,670 --> 00:16:50,290 Comment est-il établi que si vous tapez sh vous obtenez Bash, 253 00:16:50,290 --> 00:16:55,580 si vous tapez csh vous obtenez tsch? 254 00:16:55,580 --> 00:16:59,940 Il ya des choses dans ces ordinateurs appelés liens 255 00:16:59,940 --> 00:17:06,460 qui peut se connecter aux noms de fichier pour désigner la même chose. 256 00:17:06,460 --> 00:17:12,180 Il peut être soit 2 noms pour le même fichier ou dans un fichier dont le but est de se référer à un autre fichier. 257 00:17:12,180 --> 00:17:17,550 Ils sont appelés liens durs et symboliques. Nous n'irons pas dans cette plus aujourd'hui. 258 00:17:17,550 --> 00:17:21,619 Il peut aussi y avoir des fichiers séparés - 1 fichier sh, 1 fichier Bash - 259 00:17:21,619 --> 00:17:23,880 mais ils courent tous les deux Bash. 260 00:17:23,880 --> 00:17:29,350 Puis il ya un autre qualificatif ici. 261 00:17:29,350 --> 00:17:42,640 Si vous appelez un de ces obus par un nom, 262 00:17:42,640 --> 00:17:46,640 vous pensez que vous obtiendrez les mêmes fonctionnalités que l'appelant par un autre nom. 263 00:17:46,640 --> 00:17:49,700 Eh bien, c'est en fait pas nécessairement vrai. 264 00:17:49,700 --> 00:17:55,020 Ces commandes peuvent examiner le nom par lequel ils ont été appelés 265 00:17:55,020 --> 00:18:00,020 et ils peuvent, sur la base de ce nom, se comporter différemment. 266 00:18:00,020 --> 00:18:02,740 Il peut y avoir des problèmes d'essayer de se conformer à une norme. 267 00:18:02,740 --> 00:18:06,060 Certains d'entre vous ont peut-être entendu parler de la norme POSIX ou d'une autre, 268 00:18:06,060 --> 00:18:08,730 peut-être d'autres caractéristiques. 269 00:18:08,730 --> 00:18:14,520 Cela peut être sélectionné parfois par des arguments de ligne de commande 270 00:18:14,520 --> 00:18:17,310 ou en définissant des variables shell. 271 00:18:17,310 --> 00:18:22,170 Appel comme sh ou bash peut effectivement conduire à une exécution différente 272 00:18:22,170 --> 00:18:25,300 même si c'est le même fichier que vous exécuter. 273 00:18:25,300 --> 00:18:31,800 Une autre chose à considérer est que, même si un autre ordinateur a tcsh ou Bash, 274 00:18:31,800 --> 00:18:35,310 si elles ne sont pas liées car ils se trouvent sur votre ordinateur local 275 00:18:35,310 --> 00:18:37,990 si vous avez un ordinateur local Linux ou Mac OS, 276 00:18:37,990 --> 00:18:45,630 là encore, vous aurez l'enveloppe que vous appelez sh ou csh, pas celui que vous préférez peut-être. 277 00:18:50,430 --> 00:19:01,130 Le shell Bourne actuelle comporte des améliorations moindre que ceux de Bash 278 00:19:01,130 --> 00:19:06,100 mais passé ceux du shell Bourne originale. 279 00:19:06,100 --> 00:19:09,690 En conséquence de cela, même l'enveloppe actuelle Bourne, sh, 280 00:19:09,690 --> 00:19:14,560 même quand il n'est pas Bash, ressemble à la langue C de plus que le C-shell fait. 281 00:19:14,560 --> 00:19:20,460 Ce n'était pas vrai lorsque le C-shell a été créé, mais il a développé de cette façon. 282 00:19:20,460 --> 00:19:26,560 Vous remarquerez peut-être ici que tous ces noms de coquille, sauf pour le shell Bourne 283 00:19:26,560 --> 00:19:30,640 avoir quelque chose à indiquer qui enveloppe qu'ils sont - csh, bash - 284 00:19:30,640 --> 00:19:32,550 mais le shell Bourne est juste sh. 285 00:19:32,550 --> 00:19:34,910 Pourquoi? C'était la coque d'origine. 286 00:19:34,910 --> 00:19:37,770 C'était la coque alors, pas une coquille, 287 00:19:37,770 --> 00:19:41,090 et comme c'était la coque, il n'y avait aucune raison de le distinguer d'un autre shell. 288 00:19:41,090 --> 00:19:45,030 Donc, c'est pourquoi il a ce nom et le fait encore. 289 00:19:50,630 --> 00:19:58,990 >> Ce haut ici est une ligne d'une base de données de mot de passe pour un compte J'ai là 290 00:19:58,990 --> 00:20:01,680 sur un autre ordinateur. 291 00:20:01,680 --> 00:20:08,300 Je vais essayer d'obtenir ce nom de sorte que vous pouvez voir la partie à la fin, la coquille. 292 00:20:09,720 --> 00:20:15,450 La base de données de mots de passe contient les caractéristiques de connexion pour tous les utilisateurs. 293 00:20:15,450 --> 00:20:20,330 Au début est le nom d'utilisateur, qui vous pouvez voir les deux dernières lettres de moi maintenant. 294 00:20:20,330 --> 00:20:23,970 Les champs ici sont séparées par des virgules. 295 00:20:23,970 --> 00:20:28,210 Le dernier champ, comme vous pouvez le voir, est bin / tcsh, l'interpréteur. 296 00:20:28,210 --> 00:20:30,230 C'est l'indicateur de coquille. 297 00:20:30,230 --> 00:20:33,240 Il ya quelque chose d'intéressant ici. 298 00:20:33,240 --> 00:20:36,950 Lorsque Unix a été développé, il y avait seulement une coquille, 299 00:20:36,950 --> 00:20:38,350 donc il n'y avait pas le choix il. 300 00:20:38,350 --> 00:20:45,570 Alors pourquoi ont-ils permis un champ dans la base de données de mots de passe pour spécifier une coquille? 301 00:20:45,570 --> 00:20:47,920 Je ne sais pas, mais c'est la chance qu'ils ont. 302 00:20:47,920 --> 00:20:52,030 Il est assez difficile de faire des changements dans le format de base de données de mots de passe 303 00:20:52,030 --> 00:20:54,420 car de nombreux programmes se rapportent à son format 304 00:20:54,420 --> 00:20:57,720 et devraient être réécrit. 305 00:20:57,720 --> 00:21:04,130 C'est un développement heureux ou fortuit qu'ils comprenaient ce domaine. 306 00:21:04,130 --> 00:21:12,780 Ce genre de ligne du fichier de mot de passe est utilisé sur tous les ordinateurs Unix et Linux pour autant que je sais. 307 00:21:12,780 --> 00:21:14,650 Le Mac a son propre système. 308 00:21:14,650 --> 00:21:17,810 Il a fait un fichier de mot de passe avec les lignes dans ce format, 309 00:21:17,810 --> 00:21:21,060 mais ce n'est pas là les caractéristiques de l'utilisateur sont définies. 310 00:21:21,060 --> 00:21:24,200 Une autre remarque entre parenthèses il. 311 00:21:36,470 --> 00:21:46,020 >> Si vous appelez un shell, vous pouvez l'appeler comme une sous-couche de vos coquilles existants. 312 00:21:46,020 --> 00:21:50,480 Donc, si je vais ici, Débarrassons-nous de ces choses. 313 00:21:50,480 --> 00:21:53,350 Ici, je suis dans le C-shell. 314 00:21:56,830 --> 00:22:01,200 Cette variable, qui identifie avec précision ma coquille, 315 00:22:01,200 --> 00:22:04,300 est en fait pas toujours un moyen fiable de déterminer ce shell que vous utilisez, 316 00:22:04,300 --> 00:22:06,220 mais dans ce cas il est. 317 00:22:06,220 --> 00:22:08,040 Que faire si je tape juste - 318 00:22:09,970 --> 00:22:12,470 Maintenant, je suis dans Bash. 319 00:22:12,470 --> 00:22:19,540 Certaines choses vont être la même. ls me dit mes commandes. 320 00:22:19,540 --> 00:22:24,500 Si je ne suspends un retour à mon C-shell, ls, même. Droite? 321 00:22:24,500 --> 00:22:28,890 fg, au premier plan, de retour à mon shell Bash. 322 00:22:28,890 --> 00:22:38,290 pwd, répertoire courant, vers le C-shell. 323 00:22:38,290 --> 00:22:43,180 pwd, répertoire différent - en fait pas un répertoire différent dans ce cas. 324 00:22:43,180 --> 00:22:45,110 C'est le même répertoire. 325 00:22:45,110 --> 00:22:50,000 Disons que je veux appeler une commande ici: où ls. 326 00:22:50,000 --> 00:22:52,140 Qu'est-ce que faire? 327 00:22:52,140 --> 00:22:53,670 Il me dit où la commande ls, 328 00:22:53,670 --> 00:22:56,670 celui qui me donne une liste de répertoire, est situé dans ls. 329 00:22:56,670 --> 00:23:01,460 Revenons à Bash. Essayons la même chose. 330 00:23:01,460 --> 00:23:05,830 Hmm, intéressant là-bas, où: command not found. 331 00:23:05,830 --> 00:23:07,400 Pourquoi est-ce? 332 00:23:07,400 --> 00:23:11,570 La où commande est intégré à la C-shell. 333 00:23:11,570 --> 00:23:15,630 Ce n'est pas une commande qui doit être lu dans la mémoire de quelque part d'autre et exécuté. 334 00:23:15,630 --> 00:23:20,310 Le C-shell fonctionne en transférant exécution une partie de son propre code 335 00:23:20,310 --> 00:23:22,790 et ce n'est pas dans le shell Bash. 336 00:23:22,790 --> 00:23:25,710 Donc, Bash, ne pas avoir une telle commande intégrée, le cherche, ne trouve pas, 337 00:23:25,710 --> 00:23:27,720 et nous obtenons une erreur. 338 00:23:27,720 --> 00:23:32,290 Donc, nous avons là un shell Bash fonctionnant sous un C-shell, et nous appelons cela un sous-shell. 339 00:23:32,290 --> 00:23:38,480 Et juste au cas où vous êtes curieux, Bash a sa propre façon de commandes localisation. 340 00:23:38,480 --> 00:23:42,590 hachée fait référence au fait qu'il ne peut être exécutée plus rapidement, 341 00:23:42,590 --> 00:23:44,960 être trouvé plus rapidement. 342 00:23:44,960 --> 00:23:48,610 C'est l'une des améliorations intégrées à certaines de ces coquilles. 343 00:23:50,220 --> 00:23:54,200 >> Shells de type Bourne type sont préférés pour la programmation. 344 00:23:54,200 --> 00:23:57,300 Ils ont des structures de contrôle comme des boucles, des instructions conditionnelles, 345 00:23:57,300 --> 00:24:00,240 le genre de commandes que vous pouvez utiliser dans les langages de programmation comme C 346 00:24:00,240 --> 00:24:04,190 ou quelle que soit la langue. Peut-être que vous programmez en Java ou autre. 347 00:24:04,190 --> 00:24:06,460 Coquilles ont ceux qui sont trop. 348 00:24:06,460 --> 00:24:11,790 Les coquilles de type Bourne, en particulier Bash, ont plus 349 00:24:11,790 --> 00:24:15,730 et ils sont conçus avec une plus grande flexibilité. 350 00:24:15,730 --> 00:24:20,700 Le shell Bash a tableaux. The Bourne shell d'origine ne fonctionne pas. 351 00:24:20,700 --> 00:24:26,130 Cela peut donc être considérablement avantageuse pour la programmation. 352 00:24:26,130 --> 00:24:29,810 Le C-shell fait réellement avoir des tableaux, mais n'a pas beaucoup de ces autres caractéristiques. 353 00:24:29,810 --> 00:24:33,450 Les coquilles Bourne type s'exécute plus rapidement 354 00:24:33,450 --> 00:24:36,520 si elles ne présentent pas les caractéristiques destinées à être utilisées interactive. 355 00:24:36,520 --> 00:24:39,340 Vous chargez les choses dans un seul but, ce qui leur charge pour un autre but. 356 00:24:39,340 --> 00:24:41,520 Il ya ce compromis là. 357 00:24:41,520 --> 00:24:44,510 Ces dispositifs qui sont destinés à un usage interactif 358 00:24:44,510 --> 00:24:46,920 sont vraiment de peu ou pas de script. 359 00:24:46,920 --> 00:24:52,160 Il est possible d'utiliser un sous-shell interactif comme celui que j'ai commencé il 360 00:24:52,160 --> 00:24:57,780 de tester les commandes que vous souhaitez utiliser dans un script. 361 00:24:57,780 --> 00:25:01,180 C'est ce que vous ne pouvez pas faire avec perl. Vous pouvez le faire avec les coquilles. 362 00:25:01,180 --> 00:25:04,850 Même les structures comme pour les boucles et ainsi de suite peuvent être exécutés de manière interactive. 363 00:25:04,850 --> 00:25:07,000 Ils sont parfois utiles pour exécuter de manière interactive, 364 00:25:07,000 --> 00:25:10,180 mais plus vous les utilisez pour développer un script. 365 00:25:15,690 --> 00:25:17,400 >> Alias. 366 00:25:17,400 --> 00:25:21,630 Cela va être sur le C-shell. 367 00:25:23,270 --> 00:25:27,570 mécanisme d'histoire où vous revenez aux commandes antérieures 368 00:25:27,570 --> 00:25:30,340 ou des parties de celles que vous avez déjà exécuté. 369 00:25:30,340 --> 00:25:33,680 Encore une fois, sur le C-shell, Bourne shell et Korn shell ont ces choses, 370 00:25:33,680 --> 00:25:35,620 mais je ne vais pas entrer dans les. 371 00:25:35,620 --> 00:25:40,340 Alors, voici quelques alias utiles que j'ai. 372 00:25:43,100 --> 00:25:44,880 Au lieu de taper ls - c'est un commandement commun - 373 00:25:44,880 --> 00:25:47,620 il suffit de taper l et vous épargner 1 caractère. 374 00:25:47,620 --> 00:25:50,600 ls avec diverses options, tous ceux qui travaillent. 375 00:25:50,600 --> 00:25:54,460 Notez que ces définitions ont citations autour d'eux. 376 00:25:54,460 --> 00:25:57,520 Dans ces cas, les citations ne sont pas nécessaires. 377 00:25:57,520 --> 00:26:00,100 Si vous pouvez définir ces alias sans les guillemets, il fonctionne encore. 378 00:26:00,100 --> 00:26:02,910 Ils sont recommandés. 379 00:26:02,910 --> 00:26:04,900 Il ya des situations où vous ne pouvez pas utiliser la citation 380 00:26:04,900 --> 00:26:08,050 parce que vous voulez quelque chose se passe qui empêcherait la citation. 381 00:26:08,050 --> 00:26:11,210 Parfois, vous pouvez citer une partie de la définition, mais pas la totalité. 382 00:26:11,210 --> 00:26:17,010 Il est également généralement recommandé d'utiliser des guillemets simples au lieu de guillemets doubles. 383 00:26:17,010 --> 00:26:19,750 Les guillemets doubles ont des effets sur les définitions de variables, 384 00:26:19,750 --> 00:26:22,950 en particulier les amenant à être évalués au lieu de l'arrêter. 385 00:26:22,950 --> 00:26:25,910 Pourquoi voudrions-nous d'arrêter l'évaluation? 386 00:26:25,910 --> 00:26:28,710 Et comment ne citations font que pour nous? 387 00:26:28,710 --> 00:26:32,600 >> Voici une commande que vous pourriez trouver intéressant. 388 00:26:32,600 --> 00:26:35,470 'Ls g *' 389 00:26:35,470 --> 00:26:37,640 g *, comme vous le savez sans doute, est une expression générique 390 00:26:37,640 --> 00:26:40,290 pour tous les noms de fichiers commençant par g. 391 00:26:40,290 --> 00:26:46,410 Si je viens d'écrire dans une commande ls g *, je vais avoir une liste de tous les noms dans mon répertoire courant. 392 00:26:46,410 --> 00:26:50,870 Si je définis cet alias comme ici avec les guillemets, 393 00:26:50,870 --> 00:26:56,990 elle se déroulera cette commande dans le répertoire courant où vous exécuter. 394 00:26:56,990 --> 00:27:01,250 Mais si vous avez la définition d'alias sans les guillemets, 395 00:27:01,250 --> 00:27:09,620 il évaluera le caractère générique * g quand il lance cette commande définir. 396 00:27:09,620 --> 00:27:14,400 Ainsi, la définition de l'alias sera ls suivie par la liste des fichiers dans le répertoire 397 00:27:14,400 --> 00:27:16,310 dans lequel la commande alias est exécuté, 398 00:27:16,310 --> 00:27:19,180 indépendamment du lieu où vous avez réellement l'intention d'exécuter la commande. 399 00:27:19,180 --> 00:27:26,360 Ce n'est pas d'une grande utilité, et les guillemets simples empêcher l'évaluation de l'astérisque. 400 00:27:26,360 --> 00:27:30,780 Alors que vous venez d'obtenir la définition être ls g *. 401 00:27:30,780 --> 00:27:35,510 Ensuite, lorsque vous exécutez l'alias, LGS, il met alors cela. 402 00:27:35,510 --> 00:27:40,490 Maintenant, il n'y a pas de citations, et évalueront l'astérisque lorsque vous exécutez la commande alias. 403 00:27:40,490 --> 00:27:43,900 Donc, c'est une chose. 404 00:27:43,900 --> 00:27:46,590 Guillemets auraient même effet ici, 405 00:27:46,590 --> 00:27:50,580 mais il ya d'autres cas dans lesquels des guillemets ne fonctionnerait pas si bien. 406 00:27:50,580 --> 00:27:52,450 >> En voici une autre. 407 00:27:52,450 --> 00:27:54,270 Vous savez peut-être la commande grep. 408 00:27:54,270 --> 00:28:02,110 La commande grep peut être utilisé pour scanner un fichier pour les lignes qui ont certaines chaînes. 409 00:28:02,110 --> 00:28:10,350 Allons donc ici et je vais quitter depuis mon shell Bourne. 410 00:28:23,570 --> 00:28:25,450 Très bien. Voici un fichier. 411 00:28:25,450 --> 00:28:31,490 Disons que c'est grep chaînes d'ABC. Il est là. 412 00:28:31,490 --> 00:28:37,930 Si je fais zddd grep, je ne reçois rien. Très bien. 413 00:28:37,930 --> 00:28:40,960 Donc, il trouve une chaîne, il rend compte, il ne trouve pas, il ne se présente pas. 414 00:28:40,960 --> 00:28:44,930 Il produit une ligne qui a cette chaîne sur elle. 415 00:28:44,930 --> 00:28:49,080 Il ya toutes sortes d'options ici que vous pouvez trouver dans la documentation. 416 00:28:49,080 --> 00:28:52,160 Voici une façon de le faire. 417 00:28:52,160 --> 00:29:03,290 Qu'en est-il celui-ci, alias grabc grep abc '? 418 00:29:03,290 --> 00:29:09,000 Cela va inclure une argumentation lorsque l'alias est défini. 419 00:29:09,000 --> 00:29:26,300 Donc, si je fais ça ici, maintenant, si je fais grabc, 420 00:29:26,300 --> 00:29:30,620 maintenant l'alias comprend plus que la simple commande. Il a également l'argument. 421 00:29:30,620 --> 00:29:32,190 Jusqu'à présent, cela fonctionne. 422 00:29:32,190 --> 00:29:38,590 J'ai une autre commande ici, celui-ci, ce sont donc les différentes chaînes en y 423 00:29:38,590 --> 00:29:46,790 et montrer que ce ne trouve rien là car il ne correspond pas. 424 00:29:46,790 --> 00:29:56,180 >> Que faire si je veux inclure dans la définition d'alias le fichier que je vais chercher 425 00:29:56,180 --> 00:30:02,970 et je veux donner comme argument à l'alias de la chaîne que je cherche? 426 00:30:02,970 --> 00:30:08,040 Je pourrais vouloir dire abc comme argument de mon alias, 427 00:30:08,040 --> 00:30:10,870 mais l'alias déjà déterminé le fichier. 428 00:30:10,870 --> 00:30:15,710 Et c'est là que cette expression entre en jeu. 429 00:30:20,430 --> 00:30:25,270 Nous avons ici grep comme avant. 430 00:30:25,270 --> 00:30:28,130 Nous avons le fichier ici, cordes. 431 00:30:28,130 --> 00:30:35,610 \! ^, Type d'une expression étrange, je suppose, si vous n'avez pas vu cela avant. 432 00:30:35,610 --> 00:30:39,920 Point d'exclamation fait partie du mécanisme de l'histoire C-shell. 433 00:30:39,920 --> 00:30:45,220 Il peut rappeler des commandes précédentes, on peut rappeler les arguments de ces commandes et ainsi de suite. 434 00:30:46,760 --> 00:31:01,570 Le mécanisme d'historique est utilisé comme partie de repliement du spectre. 435 00:31:01,570 --> 00:31:07,390 Si vous spécifiez une ligne après le point d'exclamation, il fera référence à cette ligne dans la liste de l'historique, 436 00:31:07,390 --> 00:31:11,910 que nous n'obtiendrons pas en maintenant puisque c'est un tout autre sujet. 437 00:31:11,910 --> 00:31:16,280 Il est possible de saisir une partie d'une ligne. 438 00:31:16,280 --> 00:31:22,950 Alors! 03:02 serait le deuxième argument de la commande numéro 3. 439 00:31:22,950 --> 00:31:30,430 L'accent circonflexe dans cette expression désigne le premier argument. 440 00:31:30,430 --> 00:31:34,410 Si vous ne lui donnez pas une indication de la commande que vous parlez, 441 00:31:34,410 --> 00:31:37,300 elle se réfère à la commande immédiatement précédente, 442 00:31:37,300 --> 00:31:41,990 et le curseur est un symbole pour le premier argument. 443 00:31:41,990 --> 00:31:46,820 Parce que c'est le signe d'insertion et pas le numéro, vous n'avez pas besoin d'utiliser le côlon, 444 00:31:46,820 --> 00:31:52,660 si! ^ signifie que le premier argument de la commande précédente. 445 00:31:52,660 --> 00:31:55,020 Un peu mêlé ici. 446 00:31:55,020 --> 00:31:58,450 Dans ce cas, lorsque vous utilisez cela comme une définition de l'alias, 447 00:31:58,450 --> 00:32:04,650 la référence de l'histoire renvoie à des commandes dont l'alias est utilisé. 448 00:32:04,650 --> 00:32:08,470 Donc, cela va revenir une commande comme une opération de l'histoire, 449 00:32:08,470 --> 00:32:11,810 mais comme une opération d'alias, il se réfère à la commande dans laquelle vous souhaitez taper, 450 00:32:11,810 --> 00:32:14,780 dire, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Nous avons les citations ici en elle. Quelle est la barre oblique inverse pour? 452 00:32:20,240 --> 00:32:30,810 Dans ce cas, comme ailleurs, nous ne voulons pas d'exécuter le mécanisme d'historique 453 00:32:30,810 --> 00:32:33,680 tout en définissant l'alias. 454 00:32:33,680 --> 00:32:37,900 Si nous n'avions pas la barre oblique inverse là, le shell tirer dans le premier argument 455 00:32:37,900 --> 00:32:41,870 de la commande juste avant il a couru cette commande alias, que nous ne voulons pas. 456 00:32:41,870 --> 00:32:47,520 Nous voulons que cela soit intégré à la commande alias de faire appel à un argument plus tard. 457 00:32:47,520 --> 00:32:53,550 Les guillemets simples n'échappent pas à un point d'exclamation, la référence de l'histoire. 458 00:32:53,550 --> 00:32:57,450 Peut-être que vous connaissez l'évasion d'expression signifie de changer le sens de quelque chose. 459 00:32:57,450 --> 00:33:00,260 Dans ce cas, cela signifie d'arrêter quelque chose d'avoir une signification particulière. 460 00:33:00,260 --> 00:33:03,030 Signification spéciale de points d'exclamation à l'histoire. 461 00:33:03,030 --> 00:33:05,790 Échapper et il n'a pas ce sens. 462 00:33:05,790 --> 00:33:08,080 Citations ne font pas cela; barre oblique inverse fait. 463 00:33:08,080 --> 00:33:11,900 Donc, nous sommes en fait en utilisant deux niveaux d'échapper ici. 464 00:33:23,500 --> 00:33:29,620 Je vais passer cette commande dans l'autre fenêtre sans taper 465 00:33:29,620 --> 00:33:35,210 par l'utilisation de ces opérations d'édition, qui pourraient vous être utiles. 466 00:33:40,620 --> 00:33:42,460 Quelque chose d'autre ici, je vais vous montrer. 467 00:33:42,460 --> 00:33:46,730 Si vous tapez simplement alias sans arguments, il vous indique tous vos arguments. 468 00:33:46,730 --> 00:33:48,640 Il s'agit d'un groupe d'alias j'avais déjà ici 469 00:33:48,640 --> 00:33:53,400 en plus de ceux que j'ai utilisé ici aujourd'hui. 470 00:33:53,400 --> 00:34:00,220 Mais si je viens de taper le nom d'un alias, il me dit ce que cela signifie. 471 00:34:00,220 --> 00:34:03,390 Notez que les citations sont partis et la barre oblique inverse est parti. 472 00:34:03,390 --> 00:34:08,620 Cette chaîne ici est le résultat de cette définition de l'alias, 473 00:34:08,620 --> 00:34:12,199 et maintenant il vient! ^ en elle. 474 00:34:12,199 --> 00:34:19,150 Cela va chercher dans les chaînes de fichiers pour rien. 475 00:34:19,150 --> 00:34:34,900 Donc, si je fais chaînes grstrings_file, je ne lui donne pas quelque chose à chercher là-bas, 476 00:34:34,900 --> 00:34:37,429 mais il est à la recherche dans les chaînes. 477 00:34:37,429 --> 00:34:42,330 Il n'a pas trouvé les chaînes de mots dans les fichiers des chaînes, mais il ne trouve abc. 478 00:34:42,330 --> 00:34:46,770 Et il ne trouve pas. 479 00:34:46,770 --> 00:34:52,330 Donc, ici, nous donnons un argument qui frappe dans la définition de l'alias, 480 00:34:52,330 --> 00:34:55,530 qui est insérée dedans. 481 00:34:55,530 --> 00:34:58,540 C'est là que cette expression vient. 482 00:34:58,540 --> 00:35:00,240 Vous pouvez utiliser plus de 1. 483 00:35:00,240 --> 00:35:03,170 Le curseur est un symbole pour le premier argument. 484 00:35:03,170 --> 00:35:07,510 Si vous souhaitez utiliser un deuxième argument, il vous faudra alors dire: 2. 485 00:35:07,510 --> 00:35:11,250 Il n'y a pas symbole spécial pour le second argument. 486 00:35:11,250 --> 00:35:14,790 Et parce que vous utilisez un chiffre, vous devez utiliser le côlon. 487 00:35:14,790 --> 00:35:17,220 Il ya, cependant, un autre choix ici. 488 00:35:17,220 --> 00:35:21,220 Le symbole du dollar représente le dernier argument. 489 00:35:21,220 --> 00:35:23,320 Et parce que c'est un symbole, vous pouvez omettre le côlon. 490 00:35:23,320 --> 00:35:25,870 Donc, il serait le dernier argument dans la liste. 491 00:35:25,870 --> 00:35:27,900 Et il ya aussi celui-là. 492 00:35:27,900 --> 00:35:31,380 Asterisk signifie que tous, c'est donc la liste complète des arguments, 493 00:35:31,380 --> 00:35:35,150 et encore, vous pouvez omettre le côlon car ce n'est pas un chiffre. 494 00:35:36,970 --> 00:35:39,950 J'espère que vous êtes tous en observant tout cela. 495 00:35:39,950 --> 00:35:54,100 >> Le mécanisme de l'histoire ne peut revenir aux lignes précédentes dans la liste de l'histoire. 496 00:35:54,100 --> 00:36:01,370 Vous pouvez le faire dans une définition d'alias. 497 00:36:01,370 --> 00:36:02,950 Je n'ai jamais vu cela. 498 00:36:02,950 --> 00:36:05,840 Il aurait pour effet de tirer des commandes antérieures de la liste de l'histoire 499 00:36:05,840 --> 00:36:08,130 lorsque vous exécutez l'alias, qui pourraient être différentes commandes 500 00:36:08,130 --> 00:36:11,240 selon le moment et l'endroit où vous l'exécutez. 501 00:36:11,240 --> 00:36:14,020 Il est concevable que vous pouvez sortir d'une telle référence 502 00:36:14,020 --> 00:36:15,900 juste pour savoir ce qu'est une commande antérieure était. 503 00:36:15,900 --> 00:36:17,280 Je n'ai jamais vu cela se produire. 504 00:36:17,280 --> 00:36:19,970 Je suppose que quelqu'un pourrait vouloir, mais c'est très peu probable. 505 00:36:19,970 --> 00:36:26,480 Il ya autre chose ici. 506 00:36:26,480 --> 00:36:33,060 Si vous utilisez cette référence de type d'histoire, 507 00:36:33,060 --> 00:36:38,190 seuls les arguments pour lesquels il existe une telle référence sont utilisés. 508 00:36:38,190 --> 00:36:42,180 Si vous avez une définition de l'alias qui n'utilise pas une référence de type d'histoire, 509 00:36:42,180 --> 00:36:44,060 si elle devient tout simplement le début de la commande 510 00:36:44,060 --> 00:36:46,520 et vous avez d'autres arguments, alors tout ce que vous tapez après que 511 00:36:46,520 --> 00:36:48,450 sera ajouté à la commande. 512 00:36:48,450 --> 00:36:52,040 Dans ce cas, l'exemple que je viens de donner là-bas, nous avons utilisé le premier argument; 513 00:36:52,040 --> 00:36:54,610 nous n'avons pas utilisé les autres. 514 00:36:54,610 --> 00:36:57,960 Si d'autres arguments ont été donnés sur la ligne de commande, ils ne seraient pas utilisés. 515 00:36:57,960 --> 00:37:04,630 Donc, si vous utilisez la référence de l'histoire du tout, alors vous devez l'utiliser pour obtenir un argument. 516 00:37:04,630 --> 00:37:11,310 >> Il ya autre chose ici, je veux juste mentionner, en partie, entre parenthèses, 517 00:37:11,310 --> 00:37:15,250 à savoir que ce mécanisme d'historique avec le point d'exclamation 518 00:37:15,250 --> 00:37:18,010 remonte à la C-shell d'origine. 519 00:37:18,010 --> 00:37:27,060 Le tcsh introduit opérations d'histoire 520 00:37:27,060 --> 00:37:30,910 qui utilisent les sortes de commandes et les chaînes des éditeurs, 521 00:37:30,910 --> 00:37:33,650 soit Emacs ou vi. 522 00:37:33,650 --> 00:37:36,430 Mon opinion personnelle est Emacs est beaucoup plus facile à utiliser à cette fin 523 00:37:36,430 --> 00:37:39,390 même si vous utilisez vi pour votre édition régulière. 524 00:37:39,390 --> 00:37:43,900 Il existe différentes commandes Emacs qui sont maintenant adaptés pour l'histoire. 525 00:37:43,900 --> 00:37:46,410 Contrôle P obtient la ligne précédente dans la liste d'historique. 526 00:37:46,410 --> 00:37:48,840 Un autre contrôle P vous permet d'obtenir celle d'avant. 527 00:37:48,840 --> 00:37:50,540 La flèche vers le haut fait la même chose. 528 00:37:50,540 --> 00:37:54,190 Contrôle N reçoit la commande suivante si vous avez déjà défilé en retour certains égards. 529 00:37:54,190 --> 00:37:55,880 Flèche vers le bas fait que trop. 530 00:37:55,880 --> 00:38:00,480 Vous pouvez déplacer de gauche à droite avec les flèches et diverses autres choses. 531 00:38:00,480 --> 00:38:02,390 Cela peut rendre l'utilisation du mécanisme d'histoire 532 00:38:02,390 --> 00:38:05,070 beaucoup plus facile que d'utiliser la syntaxe de point d'exclamation, 533 00:38:05,070 --> 00:38:07,930 mais vous ne voudriez pas utiliser que dans une définition d'alias. 534 00:38:17,780 --> 00:38:20,020 Nous allons passer en revue une autre fois. 535 00:38:24,300 --> 00:38:25,810 >> Variables. 536 00:38:26,880 --> 00:38:29,510 Vous savez ce que sont les variables dans les langages de programmation. 537 00:38:29,510 --> 00:38:31,680 Les obus ont eux aussi. 538 00:38:31,680 --> 00:38:37,350 Le C-shell utilise la commande set pour assigner les variables 539 00:38:37,350 --> 00:38:41,360 de sorte que la variable définit un à la valeur de b - 540 00:38:41,360 --> 00:38:46,390 comme je l'ai dit, une définition inutile, mais une illustration de la façon dont il est utilisé. 541 00:38:48,790 --> 00:38:52,410 La commande set va créer une variable si elle n'existe pas déjà. 542 00:38:55,270 --> 00:39:02,490 Les paramètres positionnels pour les scripts shell peuvent être considérés comme des variables, 543 00:39:02,490 --> 00:39:10,750 mais l'utilisation de ces derniers et les règles pour eux sont quelque peu différents. 544 00:39:10,750 --> 00:39:14,320 Vous ne pouvez pas attribuer une valeur à 1 $ dans le cadre d'un script. 545 00:39:14,320 --> 00:39:18,340 Vous n'avez pas à définir une nouvelle variable à cet effet si certains d'entre vous voulaient. 546 00:39:23,000 --> 00:39:28,470 Tapez set sans arguments et vous obtenez une liste de toutes les variables actuellement définies. 547 00:39:28,470 --> 00:39:34,220 Et passons à mon autre coquille ici et voir ce que nous obtenons si nous faisons cela. 548 00:39:34,220 --> 00:39:37,110 Une liste assez longue, non? 549 00:39:37,110 --> 00:39:40,990 Faites défiler jusqu'à un peu. Regardez tout cela. 550 00:39:40,990 --> 00:39:44,330 Certaines de ces choses sont définies automatiquement par le shell. 551 00:39:44,330 --> 00:39:49,320 La coquille crée la variable et qu'il donne une valeur. 552 00:39:49,320 --> 00:39:52,730 Certains d'entre eux sont définis par la coque mais redéfinies par l'utilisateur 553 00:39:52,730 --> 00:39:54,820 en fonction de ses préférences. 554 00:39:54,820 --> 00:39:59,110 Et certains d'entre eux sont créés par l'utilisateur en fonction de ce qu'il fait ce jour-là. 555 00:39:59,110 --> 00:40:01,880 C'est juste réglé sans arguments. 556 00:40:06,920 --> 00:40:10,050 Il ya une caractéristique étrange ici de cette chose. 557 00:40:10,050 --> 00:40:17,980 Il doit y avoir soit pas d'espace entre le signe égal et le nom de la variable 558 00:40:17,980 --> 00:40:23,700 et la valeur ou les espaces des deux côtés du signe égal, 559 00:40:23,700 --> 00:40:28,940 comme dans celui-ci. 560 00:40:35,620 --> 00:40:41,340 Cela ne fonctionnera pas, et c'est en fait une commande valide 561 00:40:41,340 --> 00:40:43,390 mais il ne fera pas ce que vous souhaitez. 562 00:40:43,390 --> 00:40:50,070 Cette commande ne fonctionne parce que si vous dites juste de définir et un nom de variable 563 00:40:50,070 --> 00:40:54,890 sans signe égal ou fixés et un nom de variable avec un signe égal et sans valeur, 564 00:40:54,890 --> 00:40:57,770 il sera la variable à une valeur nulle. 565 00:40:57,770 --> 00:41:00,120 Donc mettre un = est une commande valide. 566 00:41:00,120 --> 00:41:04,370 La commande de réglage peut définir plus d'une variable sur la même ligne. 567 00:41:04,370 --> 00:41:11,240 Donc, cette commande ici a pour effet de définir à la fois a et b pour les valeurs NULL. 568 00:41:11,240 --> 00:41:13,470 Probablement pas ce que vous voulez. 569 00:41:13,470 --> 00:41:17,940 Celui-là, mentionné plus haut, va conduire à une erreur 570 00:41:17,940 --> 00:41:21,270 car = b n'est pas une expression valide. 571 00:41:21,270 --> 00:41:23,680 Un nom de variable ne peut pas commencer par le signe égal. 572 00:41:26,760 --> 00:41:29,080 Et il ya ces autres choses ici. 573 00:41:29,080 --> 00:41:36,820 Les deux points ont été utilisés pour sélectionner les arguments des lignes de l'histoire, 574 00:41:36,820 --> 00:41:41,210 et ils peuvent être utilisés - et je ne suis pas en avant - de modifier les choses. 575 00:41:41,210 --> 00:41:44,480 Ils peuvent également être utilisés pour modifier les variables du shell. 576 00:41:44,480 --> 00:41:49,050 Celui-ci ici, $ a, a une valeur. 577 00:41:49,050 --> 00:41:55,040 : R va décoller une extension. 578 00:41:55,040 --> 00:41:57,200 Une extension sera tout suivant un point, 579 00:41:57,200 --> 00:41:59,200 un point et tout ce qui suit à la fin d'un fichier, 580 00:41:59,200 --> 00:42:03,230 qu'à la fin de la liste après la dernière barre oblique. 581 00:42:03,230 --> 00:42:05,480 Donc, je l'ai ici. 582 00:42:05,480 --> 00:42:10,730 a est que. Il fera tomber la. O. 583 00:42:10,730 --> 00:42:16,510 S'il n'y a pas l'extension, que les chemins d'accès après le dernier slash, il n'aura aucun effet. 584 00:42:16,510 --> 00:42:27,480 a: h, que l'expression variable va décoller le dernier élément d'une liste de répertoire, 585 00:42:27,480 --> 00:42:29,660 encore une fois, seulement après le dernier slash. 586 00:42:29,660 --> 00:42:33,160 Donc, / a / b / c devient / a / b, 587 00:42:33,160 --> 00:42:38,870 mais celui-ci est modifié parce que l'élément après la liste est nulle. 588 00:42:38,870 --> 00:42:43,070 Ici, il ya quelque chose que je tiens également à souligner. 589 00:42:43,070 --> 00:42:46,770 Ces qualificatifs ne recherchent pas l'existence de ces fichiers. 590 00:42:46,770 --> 00:42:48,910 Ils regardent juste pour cordes. 591 00:42:48,910 --> 00:42:54,520 Elles sont destinées à manipuler les noms de fichiers, les chemins, 592 00:42:54,520 --> 00:42:57,520 mais ils peuvent être utilisés sur n'importe quelle chaîne, même si ce n'est pas un nom de fichier. 593 00:42:57,520 --> 00:42:58,920 Et ils ne regardent pas l'existence, 594 00:42:58,920 --> 00:43:03,550 si il n'y a pas un tel fichier, / a / b / c, cela ne fonctionnera encore. 595 00:43:03,550 --> 00:43:06,930 Que ce soit de toute utilisation est une autre question, mais il faudra encore travailler. 596 00:43:06,930 --> 00:43:12,850 Les variables sont différentes dans les interpréteurs de commandes Bourne. Nous y reviendrons plus tard. 597 00:43:12,850 --> 00:43:18,240 Signe du dollar peut être échappé, tout comme le point d'exclamation et l'astérisque. 598 00:43:18,240 --> 00:43:21,760 Signe du dollar peut être une barre oblique inverse ou les guillemets simples. 599 00:43:21,760 --> 00:43:24,790 Les guillemets ont pour effet bizarre dans tous les shells 600 00:43:24,790 --> 00:43:28,690 de forcer l'évaluation d'un signe dollar expression variable. 601 00:43:28,690 --> 00:43:31,960 Donc, si c'est d'être échappé d'une manière, les guillemets peuvent avoir l'effet 602 00:43:31,960 --> 00:43:34,380 de le soumettre à l'évaluation de toute façon. 603 00:43:34,380 --> 00:43:37,090 C'est un peu déroutant. 604 00:43:37,090 --> 00:43:43,740 S'il existe plusieurs niveaux d'échapper, comme les apostrophes à l'intérieur des guillemets 605 00:43:43,740 --> 00:43:46,770 ou des guillemets à l'intérieur des guillemets simples, vous devriez tester pour voir ce qui va arriver 606 00:43:46,770 --> 00:43:49,520 à une variable si vous utilisez un. 607 00:43:49,520 --> 00:43:53,410 Ces deux situations - deux à l'intérieur du seul, à l'intérieur même de la double - 608 00:43:53,410 --> 00:43:55,980 ne vous donnent pas nécessairement le même résultat. 609 00:44:02,520 --> 00:44:05,600 Les variables d'environnement, les variables C-shell liés. 610 00:44:05,600 --> 00:44:08,340 Les variables d'environnement sont également variables dans le C-shell, 611 00:44:08,340 --> 00:44:11,250 et ils sont également des variables dans d'autres shells. 612 00:44:11,250 --> 00:44:15,230 Dans le C-shell, ils sont ensembles distincts. 613 00:44:15,230 --> 00:44:18,130 Les choses que je disais avant sont sur les variables du shell. 614 00:44:18,130 --> 00:44:21,300 Les variables d'environnement sont un ensemble distinct de variables 615 00:44:21,300 --> 00:44:28,650 à l'exception de plusieurs variables que nous appelons variables liées, 616 00:44:28,650 --> 00:44:30,640 qui sont très importants et nous allons entrer dans les plus tard. 617 00:44:30,640 --> 00:44:34,950 Les variables d'environnement sont automatiquement répercutés sur 618 00:44:34,950 --> 00:44:41,800 à coques ou des commandes qui sont exécutées depuis le shell. 619 00:44:41,800 --> 00:44:46,220 Les autres choses ne sont pas. Les variables shell, les alias ne sont pas. Les variables d'environnement sont. 620 00:44:46,220 --> 00:44:48,630 C'est pourquoi nous les appelons des variables d'environnement, 621 00:44:48,630 --> 00:44:55,030 l'idée étant que l'environnement s'étend au-delà simplement votre shell courant. 622 00:44:55,030 --> 00:45:00,510 Ils peuvent être utilisés pour définir les choses pour les commandes. 623 00:45:00,510 --> 00:45:05,470 Voici un exemple. IMPRIMANTE, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Ces deux variables peuvent définir une imprimante une commande utiliser pour imprimer des choses. 625 00:45:12,270 --> 00:45:16,500 Si vous avez plusieurs imprimantes autour, vous voudrez peut-être mettre celui que vous aimez. 626 00:45:16,500 --> 00:45:21,320 La raison pour laquelle nous avons deux variables est que les différents ensembles de commandes ont été écrites 627 00:45:21,320 --> 00:45:23,870 l'utilisation de ces différentes variables. 628 00:45:23,870 --> 00:45:25,910 Vous pourriez leur donner des valeurs différentes. 629 00:45:25,910 --> 00:45:28,860 Très probablement, vous allez leur donner à la fois la même valeur. 630 00:45:28,860 --> 00:45:35,840 Ces choses fonctionnent parce que les commandes qui font impression 631 00:45:35,840 --> 00:45:40,740 ont été programmés pour examiner les valeurs de ces variables. 632 00:45:42,200 --> 00:45:46,150 Si un programme n'a pas été écrit de cette façon, si elle avait été écrite pour faire autre chose, 633 00:45:46,150 --> 00:45:48,280 la variable ne serait pas pertinente. 634 00:45:48,280 --> 00:45:52,530 Ainsi, le système d'exploitation n'est pas à la recherche de ces variables 635 00:45:52,530 --> 00:45:55,210 chaque fois que vous parlez d'une imprimante. 636 00:45:55,210 --> 00:45:59,090 Une commande qui fait impression est à la recherche de ces variables si elle est programmée de cette façon. 637 00:46:11,030 --> 00:46:15,240 Ces variables sont souvent définis dans vos fichiers d'initialisation 638 00:46:15,240 --> 00:46:19,440 mais pas nécessairement. 639 00:46:19,440 --> 00:46:21,050 Vous pouvez les définir sur la ligne de commande. 640 00:46:21,050 --> 00:46:24,090 Ils peuvent être définis dans une commande. 641 00:46:24,090 --> 00:46:28,740 Une commande qui fonctionne quelque chose pourrait avoir sa propre sélection de variables - 642 00:46:28,740 --> 00:46:32,390 variables qui sont propres à un logiciel particulier, par exemple. 643 00:46:32,390 --> 00:46:36,740 Ils seront définis lorsque vous exécutez ce package. 644 00:46:39,690 --> 00:46:42,680 Comment sont ces variables transmises à un sous-shell? 645 00:46:42,680 --> 00:46:48,210 Quand un sous-shell est écrit, il n'écrit pas dans ce domaine. 646 00:46:48,210 --> 00:46:53,260 Le domaine de la sous-couche qui est consacré à des variables d'environnement 647 00:46:53,260 --> 00:46:56,450 n'est pas rédigé par la sous-couche, il est écrit par la copie. 648 00:46:56,450 --> 00:47:00,530 Lorsque vous exécutez une commande ordinaire, comme ces commandes à imprimer ou que ce soit, 649 00:47:00,530 --> 00:47:03,840 ils commencent par créer un nouveau shell. 650 00:47:03,840 --> 00:47:06,190 Le shell crée une coquille, puis écrase une partie de celui-ci 651 00:47:06,190 --> 00:47:08,800 avec la commande que vous utilisez, ce qui est un peu déroutant, 652 00:47:08,800 --> 00:47:10,740 mais c'est la façon dont ces commandes obtiennent les variables d'environnement 653 00:47:10,740 --> 00:47:14,890 alors qu'ils se réfèrent à la suite. 654 00:47:21,920 --> 00:47:28,010 La commande ici pour définir la setenv variable. 655 00:47:28,010 --> 00:47:36,470 C'est ainsi que vous définissez. C'est trois éléments: setenv, variable, valeur. 656 00:47:36,470 --> 00:47:44,710 Si vous n'avez tout simplement setEnv sans arguments, ce que vous obtenez? 657 00:47:47,220 --> 00:47:48,810 Une liste de toutes les variables. 658 00:47:48,810 --> 00:47:53,190 Encore une fois, c'est une belle longue liste et dans ce cas, comme dans les autres, 659 00:47:53,190 --> 00:47:57,320 ces variables sont définies en grande partie par mon opération de connexion par la coque elle-même 660 00:47:57,320 --> 00:47:59,740 plutôt que par tout ce que j'ai fait. 661 00:47:59,740 --> 00:48:03,580 Il ya une autre commande ici, printenv. 662 00:48:07,520 --> 00:48:10,340 Qui imprime également l'environnement. 663 00:48:10,340 --> 00:48:15,240 Notez cette dernière chose ici, EDITOR = vi. 664 00:48:15,240 --> 00:48:21,120 Qui dit que si je suis en utilisant quelque chose qui appelle un éditeur 665 00:48:21,120 --> 00:48:25,530 et je ne spécifie pas un éditeur et il me permet le choix, il peut me donner vi. 666 00:48:25,530 --> 00:48:37,280 Que faire si je fais EDITOR printenv? Il me dit ce qu'il est. 667 00:48:37,280 --> 00:48:41,340 Juste avant cela, il y avait une variable, MOINS. 668 00:48:41,340 --> 00:48:46,040 Ce sont vos options par défaut lorsque je lance la commande MOINS, 669 00:48:46,040 --> 00:48:49,360 qui affiche les fichiers. 670 00:48:49,360 --> 00:48:55,910 Donc, si je fais ça, printenv peut prendre une argumentation ou 0 arguments, 671 00:48:55,910 --> 00:48:58,070 pas plus de 1. 672 00:49:01,800 --> 00:49:05,690 Il existe d'autres commandes aussi, mais nous n'allons pas entrer dans tous aujourd'hui. 673 00:49:05,690 --> 00:49:11,010 Rappelez-vous, il y avait les modificateurs pour les variables shell comme: h, 674 00:49:11,010 --> 00:49:14,350 qui passera le dernier élément d'un chemin, 675 00:49:14,350 --> 00:49:17,950 ou: r, qui passera une extension. 676 00:49:17,950 --> 00:49:23,110 Ceux s'appliquent maintenant aux variables d'environnement aussi. Ils n'ont pas l'habitude. 677 00:49:23,110 --> 00:49:24,960 Il sert à être ils ne pouvaient pas être modifiées. Maintenant, ils peuvent être. 678 00:49:24,960 --> 00:49:29,190 C'est l'une des avancées avec les développements des coquilles au fil des ans. 679 00:49:29,190 --> 00:49:35,620 Je disais que les coquilles dans le cadre de l'environnement 680 00:49:35,620 --> 00:49:43,040 et variables shell dans le C-shell sont, à quelques exceptions près, ensembles distincts. 681 00:49:43,040 --> 00:49:46,790 Vous pouvez établir une variable d'environnement et une variable de shell avec le même nom. 682 00:49:46,790 --> 00:49:49,220 Ils seront différentes variables, ils peuvent avoir des valeurs différentes. 683 00:49:49,220 --> 00:49:53,090 Modification de la valeur de l'un ne va pas changer la valeur de l'autre. 684 00:49:53,090 --> 00:49:58,070 Ces variables sont toutes évaluées avec le signe du dollar - $ a, $ que ce soit. 685 00:49:58,070 --> 00:50:02,340 Alors que faire si vous avez ce? Savez-vous que l'on vous obtenez? 686 00:50:02,340 --> 00:50:04,520 Dans mes tests, je suis la variable shell, 687 00:50:04,520 --> 00:50:07,240 mais ce n'est pas documenté et vous ne pouvez pas compter sur cela. 688 00:50:07,240 --> 00:50:10,270 Je vous demande donc, est de créer les variables shell et de l'environnement 689 00:50:10,270 --> 00:50:13,490 avec les mêmes noms une bonne idée? No. accord. 690 00:50:13,490 --> 00:50:17,460 Quelles sont les principales exceptions dans lesquelles les variables d'environnement et de coquillages 691 00:50:17,460 --> 00:50:19,860 sont reliés les uns aux autres? 692 00:50:19,860 --> 00:50:27,470 Il ya ces 4. 693 00:50:32,030 --> 00:50:35,510 Capital lettre variable d'environnement TERM, 694 00:50:35,510 --> 00:50:41,540 débourser terme variable dans les petites lettres, type d'émulation de terminal. 695 00:50:41,540 --> 00:50:47,430 Je vais juste aller ici et je vais faire écho, une commande très utile ici, 696 00:50:47,430 --> 00:50:52,560 $ Terme TERME $. Et là-bas. 697 00:50:52,560 --> 00:51:00,570 xterm est un type de terminal pour les fenêtres affichées dans le système X Window. 698 00:51:00,570 --> 00:51:04,330 xterm-couleur est une variante de celui qui permet à des couleurs différentes. 699 00:51:04,330 --> 00:51:06,580 Pourquoi avons-nous définissons que c'est? Quel est ce bon? 700 00:51:06,580 --> 00:51:09,740 Commandes qui réorganisent l'écran comme l'éditeur 701 00:51:09,740 --> 00:51:13,680 envoyer des séquences particulières, appelées séquences d'échappement, 702 00:51:13,680 --> 00:51:18,160 à un terminal ou d'une fenêtre à réarranger et ainsi de suite. 703 00:51:18,160 --> 00:51:20,990 Ces séquences sont différentes pour les différents types de terminaux. 704 00:51:20,990 --> 00:51:23,100 Ceci dit il quels sont ceux à utiliser. 705 00:51:23,100 --> 00:51:25,900 Parfois, il ya des problèmes là-bas. 706 00:51:25,900 --> 00:51:28,600 Vous voudrez peut-être changer cela. 707 00:51:28,600 --> 00:51:30,780 Si les choses ne fonctionnent pas, parfois le type de terminal est mal réglé, 708 00:51:30,780 --> 00:51:36,440 vous pourriez être en mesure de résoudre le problème en redéfinissant la variable à long terme. 709 00:51:36,440 --> 00:51:43,420 Dans ces cas, la modification d'une variable, la variable d'environnement ou la variable de shell, 710 00:51:43,420 --> 00:51:45,970 devrait changer l'autre. 711 00:51:45,970 --> 00:51:50,970 J'ai découvert grâce à l'expérience que le changement TERME en lettres capitales 712 00:51:50,970 --> 00:51:54,060 toujours ne change pas coque terme variable dans les petites lettres. 713 00:51:54,060 --> 00:51:55,550 C'est un bug. 714 00:51:55,550 --> 00:51:59,400 Je ne sais pas si c'est toujours vrai. La plupart du temps il n'est pas vrai, mais il peut être. 715 00:51:59,400 --> 00:52:02,490 Donc, si vous faites un changement, juste vérifier. 716 00:52:02,490 --> 00:52:05,830 Ce n'est pas souvent que vous avez besoin de changer cette valeur, mais de temps en temps vous faites. 717 00:52:05,830 --> 00:52:08,260 Environnement variable USER. 718 00:52:08,260 --> 00:52:12,070 Encore une fois, la variable d'environnement en majuscules, variable shell en petites lettres. 719 00:52:12,070 --> 00:52:13,710 Il s'agit de votre nom d'utilisateur. 720 00:52:13,710 --> 00:52:16,730 C'est seulement dans des circonstances très exceptionnelles 721 00:52:16,730 --> 00:52:18,420 que vous voulez changer. 722 00:52:18,420 --> 00:52:22,350 Si votre nom d'utilisateur est quelqu'un d'autre, il peut jeter toutes sortes de choses hors tension. 723 00:52:22,350 --> 00:52:26,040 répertoire d'accueil, le répertoire personnel de l'utilisateur. 724 00:52:26,040 --> 00:52:28,060 Encore une fois, vous ne voulez pas changer cela. 725 00:52:28,060 --> 00:52:32,260 Remarquez dans tous ces cas et celui que nous sommes sur le point de couvrir, la variable de chemin, 726 00:52:32,260 --> 00:52:37,070 variable d'environnement est en majuscules et la variable shell consolidé est en minuscules. 727 00:52:37,070 --> 00:52:39,240 Si vous modifiez un, vous devriez changer l'autre. 728 00:52:39,240 --> 00:52:45,960 Ce type de liaison ne peut être établie que vous ne pouvez pas lier 2 variables, 729 00:52:45,960 --> 00:52:50,570 autre que ceux-ci 4, et la liaison de ces variables ne peuvent pas être annulée, 730 00:52:50,570 --> 00:52:52,090 vous ne pouvez pas les séparer. 731 00:52:52,090 --> 00:52:55,820 Ainsi, ces quatre paires de variables sont liées. 732 00:52:55,820 --> 00:52:59,020 Ils seront toujours. Aucun autres seront. 733 00:52:59,020 --> 00:53:05,720 En outre, il serait possible de créer des variables avec les mêmes noms 734 00:53:05,720 --> 00:53:07,780 des types opposés. 735 00:53:07,780 --> 00:53:11,600 Vous pourriez faire une durée variable en coque en petites lettres 736 00:53:11,600 --> 00:53:14,990 ou une variable d'environnement TERM en lettres majuscules. 737 00:53:14,990 --> 00:53:19,040 Ces variables seraient indépendantes de ces variables appariées 738 00:53:19,040 --> 00:53:20,780 et ils seraient indépendantes les unes des autres. 739 00:53:20,780 --> 00:53:23,780 Je ne peux pas imaginer pourquoi vous feriez si vous voulez confondre les gens. 740 00:53:24,600 --> 00:53:29,730 Celui-ci ici, variable de chemin, c'est un vraiment importante. 741 00:53:29,730 --> 00:53:35,550 Une autre chose est qu'il ne peut y avoir des cas 742 00:53:35,550 --> 00:53:40,430 de variables avec des noms similaires appariés qui ne sont pas liés les uns aux autres. 743 00:53:40,430 --> 00:53:45,000 Il peut y avoir des variables shell et, en lettres majuscules et minuscules. 744 00:53:45,000 --> 00:53:48,300 Sur la base de ce nom, vous ne savez pas si cette variable est une variable de shell 745 00:53:48,300 --> 00:53:51,580 ou une variable d'environnement, et ils ne sont pas liés les uns aux autres. 746 00:53:51,580 --> 00:53:55,300 Donc, ce genre de noms couplés ne signifie pas variables liées. 747 00:53:55,300 --> 00:53:58,830 La variable de chemin, que je montrais avant, 748 00:53:58,830 --> 00:54:01,880 est une liste de noms de fichiers dans lequel la coque recherche les commandes. 749 00:54:01,880 --> 00:54:12,320 Passons sur cette fenêtre ici et nous allons faire echo $ PATH, majuscules - 750 00:54:12,320 --> 00:54:20,230 variable d'environnement - echo $ PATH, petites lettres - shell variable. 751 00:54:20,230 --> 00:54:24,980 Notez que la liste des répertoires est la même. Ceux-ci sont liés. 752 00:54:24,980 --> 00:54:26,590 Changer, vous changez l'autre. 753 00:54:26,590 --> 00:54:32,970 Dans la variable d'environnement les éléments sont séparés par des virgules. Notez que. 754 00:54:32,970 --> 00:54:35,130 Les variables shell sont séparés par des espaces. 755 00:54:35,130 --> 00:54:38,760 Cette variable d'environnement est une chaîne unique. 756 00:54:38,760 --> 00:54:41,480 La variable shell est un tableau. 757 00:54:41,480 --> 00:54:43,490 Le shell Bourne n'a pas encore tableaux. 758 00:54:43,490 --> 00:54:46,600 Bash, mais c'est déjà une partie fixe de la coque. 759 00:54:46,600 --> 00:54:48,660 Il s'agit d'une chaîne unique et non un tableau. 760 00:54:48,660 --> 00:54:50,420 Le C-shell toujours eu des tableaux. 761 00:54:50,420 --> 00:54:52,630 Les tableaux sont beaucoup plus faciles à travailler. 762 00:54:52,630 --> 00:54:54,400 Vous pouvez vous référer à des parties de celui-ci. 763 00:54:54,400 --> 00:55:02,350 $ Path donc écho [1] et je reçois / usr / bin, le premier élément. 764 00:55:02,350 --> 00:55:09,950 Encore une fois, n'oubliez pas de signe dollar représente le dernier élément de la liste de l'historique. 765 00:55:09,950 --> 00:55:16,850 Qu'arrive-t-il? Il a essayé de trouver le signe du dollar comme un symbole de variable. 766 00:55:16,850 --> 00:55:20,850 Je lui échapper. Oups. Il ne faudrait pas que ce soit. 767 00:55:20,850 --> 00:55:23,690 Certaines de ces choses ne fonctionnent pas aussi bien. 768 00:55:23,690 --> 00:55:28,140 Peut-être que nous allons laisser cela. 769 00:55:28,140 --> 00:55:36,980 Asterisk se réfère à la chose, mais c'est ce que vous obtenez si vous ne spécifiez pas un élément. 770 00:55:36,980 --> 00:55:46,170 Une autre façon que les variables de tableau peuvent être manipulés, 771 00:55:46,170 --> 00:55:49,500 nombre d'éléments là-bas, 7 éléments. 772 00:55:49,500 --> 00:55:53,410 Ici, nous mettons le signe dièse devant le nom de la variable. 773 00:55:53,410 --> 00:55:58,280 En voici un autre. Mettez un point d'interrogation là-bas. 774 00:55:58,280 --> 00:56:03,170 C'est une valeur logique. Cela indique que la variable existe. 775 00:56:03,170 --> 00:56:05,160 C'est une autre façon de travailler avec des variables. 776 00:56:05,160 --> 00:56:06,660 Que, par ailleurs, n'a pas à être une variable de tableau. 777 00:56:06,660 --> 00:56:08,210 Cela pourrait être n'importe quelle variable. 778 00:56:08,210 --> 00:56:11,840 Et si je le fais, il n'y a pas de variable et je reçois un 0. 779 00:56:11,840 --> 00:56:14,990 Une autre petite chose là-bas sur des évaluations variables. 780 00:56:23,670 --> 00:56:32,950 Retour à celui-là, si pour quelque raison vous vouliez travailler avec cette 781 00:56:32,950 --> 00:56:37,990 plutôt que de travailler avec le tableau, la variable de shell, 782 00:56:37,990 --> 00:56:41,470 il existe des commandes qui permettent de séparer ces choses basé sur le côlon. 783 00:56:41,470 --> 00:56:44,080 En fait, si vous allez faire ça dans le shell Bash, éventuellement, 784 00:56:44,080 --> 00:56:47,110 une sorte de scénario, ce serait probablement la façon dont vous le feriez. 785 00:56:47,110 --> 00:56:50,350 Mais dans le C-shell, il est beaucoup plus facile d'utiliser le tableau. 786 00:56:50,350 --> 00:56:58,250 Dans le shell Bourne, les variables sont attribués par une seule expression de ce genre, 787 00:56:58,250 --> 00:57:01,760 comme la façon dont vous pouvez affecter une variable dans un langage de programmation, 788 00:57:01,760 --> 00:57:05,110 et ici il doit y avoir aucun espace. 789 00:57:05,110 --> 00:57:09,110 Il faut que ce soit juste une chaîne. 790 00:57:09,110 --> 00:57:14,980 Dans les shells de type Bourne type, toutes les variables sont des variables de shell. 791 00:57:14,980 --> 00:57:19,250 Les variables d'environnement sont un sous-ensemble des variables shell. 792 00:57:19,250 --> 00:57:24,060 Ils se distinguent des variables non-environnement par l'exportation. 793 00:57:24,060 --> 00:57:28,860 La commande de le faire est d'exportation, comme export PRINTER. 794 00:57:28,860 --> 00:57:34,930 Si nous devions définir une telle variable, 795 00:57:34,930 --> 00:57:38,480 si nous voulions une commande d'impression à trouver, il devrait être une variable d'environnement, 796 00:57:38,480 --> 00:57:40,730 et c'est ainsi que nous nous faisons un. 797 00:57:40,730 --> 00:57:42,090 Ici, il ya quelque chose sorte de confusion. 798 00:57:42,090 --> 00:57:50,430 Cette expression, l'exportation de l'environnement, découle de ce concept de shell Bourne, 799 00:57:50,430 --> 00:57:54,520 et encore cette expression est utilisée dans les descriptions de la C-shell, 800 00:57:54,520 --> 00:57:57,920 où il n'y a pas de commande de l'exportation. 801 00:57:57,920 --> 00:58:06,200 Si vous venez de dire l'exportation par lui-même, vous obtenez une liste de exportés - 802 00:58:06,200 --> 00:58:10,620 Donc, si je ne exporter ici, rien de tel. 803 00:58:13,620 --> 00:58:15,200 Bon, là nous allons. 804 00:58:15,200 --> 00:58:17,010 Ces choses, d'ailleurs, sont également définies par le shell. 805 00:58:17,010 --> 00:58:19,400 Je n'ai pas défini l'une de ces par moi-même. 806 00:58:19,400 --> 00:58:23,550 La coquille fait toutes sortes de choses par lui-même. 807 00:58:23,550 --> 00:58:26,650 Il faut faire les choses automatiquement. 808 00:58:30,240 --> 00:58:36,880 Dans Bash ou Korn shell, vous pouvez exécuter la commande suivante, 809 00:58:36,880 --> 00:58:42,000 qui sera à la fois donner une variable une valeur et l'exporter dans une commande. 810 00:58:42,000 --> 00:58:46,150 Dans le shell Bourne, ils doivent être séparés des commandes comme une exportation. 811 00:58:46,150 --> 00:58:48,410 Voici un autre aspect qui est source de confusion. 812 00:58:48,410 --> 00:58:52,220 La commande set dans le C-shell définit les variables 813 00:58:52,220 --> 00:58:55,550 et sans arguments vous indique quelles sont les valeurs de variables sont. 814 00:58:55,550 --> 00:59:01,140 Dans le shell Bash, la commande set sans arguments fait la même chose, 815 00:59:01,140 --> 00:59:03,580 mais avec des arguments qu'il fait quelque chose de différent. 816 00:59:03,580 --> 00:59:06,200 Ce sont donc les différents arguments ici. 817 00:59:06,200 --> 00:59:10,460 Certains d'entre eux sont des variables d'environnement, certains d'entre eux sont des variables shell. 818 00:59:10,460 --> 00:59:13,200 Tous sont variables shell vraiment. Certains d'entre eux sont des variables d'environnement. 819 00:59:15,690 --> 00:59:23,920 La commande set avec des arguments peut être utilisée pour faire fonctionner 820 00:59:23,920 --> 00:59:28,220 sur les paramètres positionnels à un script, 821 00:59:28,220 --> 00:59:33,910 qui est une façon de les amener tous à la fois. 822 00:59:33,910 --> 00:59:36,150 Nous ne pouvons pas vraiment aller en parler aujourd'hui. 823 00:59:36,150 --> 00:59:39,580 Il peut également être utilisé pour modifier le comportement de la coque. 824 00:59:39,580 --> 00:59:46,700 En particulier dans Bash il ya des variables qui détermineront la façon dont le shell se comporte. 825 00:59:46,700 --> 00:59:51,310 Puis aussi cette seule commande que vous pouvez voir, cette commande. 826 00:59:51,310 --> 00:59:59,050 Composer suivie par les variables et les types de variables est utilisé dans les Korn et Bash. 827 00:59:59,050 --> 01:00:04,970 Ce n'est pas obligatoire, mais il peut être utilisé pour limiter les valeurs des variables, 828 01:00:04,970 --> 01:00:08,400 qui peut être utile pour éviter les erreurs, et il est assez commun. 829 01:00:08,400 --> 01:00:11,640 Donc, je vais juste mentionner que dans le cas où vous voyez quelque part. 830 01:00:17,290 --> 01:00:19,160 La commande où. 831 01:00:19,160 --> 01:00:22,490 Se souvenir J'ai mentionné plus tôt la commande où dans le C-shell, 832 01:00:22,490 --> 01:00:28,750 qui peut vous indiquer l'emplacement d'une commande chemin. 833 01:00:28,750 --> 01:00:32,580 Voici la substitution de commande. 834 01:00:32,580 --> 01:00:41,900 Vous devriez trouver sur votre clavier dans un endroit un caractère qui ressemble à ceci. 835 01:00:41,900 --> 01:00:44,910 La localisation sur le clavier va varier. 836 01:00:44,910 --> 01:00:47,050 Nous l'avons appelé backquote. Il s'agit de la taille d'un devis. 837 01:00:47,050 --> 01:00:48,720 Il va du coin supérieur gauche au coin inférieur droit. 838 01:00:48,720 --> 01:00:52,690 Ici sur mon clavier Mac c'est dans le coin supérieur gauche. 839 01:00:52,690 --> 01:00:58,150 Ce personnage peut être utilisé pour exécuter une commande dans une commande. 840 01:00:58,150 --> 01:01:03,400 Si vous avez une expression à l'intérieur des apostrophes inverses, 841 01:01:03,400 --> 01:01:07,080 cette expression est une commande, il est géré. 842 01:01:07,080 --> 01:01:09,010 La sortie de cette commande 843 01:01:09,010 --> 01:01:11,980 est alors substitué à l'expression entière backquote 844 01:01:11,980 --> 01:01:16,110 à l'intérieur de laquelle une commande plus court alors que la sortie avec 845 01:01:16,110 --> 01:01:22,010 dans le cadre de sa chaîne d'arguments et ainsi de suite. 846 01:01:22,010 --> 01:01:28,640 Voici une commande qui utilise cela. 847 01:01:28,640 --> 01:01:32,340 Démontrons l'opération ici. 848 01:01:44,980 --> 01:01:49,090 Allons ici, sortez les apostrophes inverses. 849 01:01:49,090 --> 01:01:54,410 Un contrôle me fait au début de la ligne avec la syntaxe d'édition Emacs. 850 01:01:54,410 --> 01:02:00,380 Jusqu'à présent, le chemins est ce d'où vient, 851 01:02:00,380 --> 01:02:05,040 mais quand je le fais comme ça, il se branche ensuite dans cette liste de noms de fichiers 852 01:02:05,040 --> 01:02:08,750 à la place de cette expression et pistes ls-l sur les backquote ensemble. 853 01:02:08,750 --> 01:02:11,120 Genre de pratique, hein? 854 01:02:11,120 --> 01:02:14,860 C'est donc une chose intéressante. C'est ainsi que fonctionnent les apostrophes inverses. 855 01:02:14,860 --> 01:02:17,560 Passons maintenant un peu plus loin. 856 01:02:17,560 --> 01:02:22,050 Ce sont des alias. En fait, je les utilise. 857 01:02:22,050 --> 01:02:26,410 Je vais essayer d'obtenir ce avec une opération d'édition. 858 01:02:34,900 --> 01:02:36,900 Très bien. 859 01:02:36,900 --> 01:02:39,630 Voyons maintenant comment ces définitions sont sortis. 860 01:02:39,630 --> 01:02:44,930 alias lwh me dire comment elle est définie. 861 01:02:44,930 --> 01:02:51,210 Notez que c'est juste, mais les citations extérieures ont été prises hors 862 01:02:51,210 --> 01:02:53,750 et le point d'exclamation est retiré. 863 01:02:53,750 --> 01:02:58,940 ! *, La liste complète de tous les arguments. 864 01:02:58,940 --> 01:03:03,580 Dans une définition de l'alias qu'il appliquera à l'endroit où j'utilise ce. 865 01:03:03,580 --> 01:03:10,620 lwh ksh bash. Très bien. 866 01:03:10,620 --> 01:03:13,960 Voir comment ça fonctionne? Il me sauve de la frappe. 867 01:03:13,960 --> 01:03:16,440 Allons un peu juste pour mentionner quelque chose d'autre ici. 868 01:03:19,150 --> 01:03:23,120 Remarquez ici ces différentes coquilles. Je l'ai mentionné auparavant. 869 01:03:23,120 --> 01:03:36,060 Le CSH a 2 ici et il en va de / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 Nous pourrions établir par d'autres moyens que ceux qui sont en fait le même fichier. 871 01:03:39,870 --> 01:03:43,150 Se souvenir que je disais, si vous tapez sh vous obtenez bash. 872 01:03:43,150 --> 01:03:47,390 Tapez ce que vous obtenez et ce. 873 01:03:47,390 --> 01:03:51,730 Mais ce ne sont pas liés. Ceux-ci ont les simples là-bas. 874 01:03:51,730 --> 01:03:54,910 Et ce n'est pas le type de fichier qui peuvent composer l'un l'autre. 875 01:03:54,910 --> 01:03:59,460 Donc, ce sont des fichiers séparés; ceux C-shell sont le même fichier. 876 01:03:59,460 --> 01:04:03,640 Retour ici, l'autre là, cet alias, 877 01:04:03,640 --> 01:04:09,090 noter que c'est l'exécution de cette commande, le fichier. 878 01:04:09,090 --> 01:04:13,810 Ce alias fonctionne que. Fichier vous indique le type d'un fichier. 879 01:04:13,810 --> 01:04:20,330 Donc FWH bash ksh. Très bien. 880 01:04:20,330 --> 01:04:23,230 C'est le résultat de la commande de fichier. 881 01:04:23,230 --> 01:04:24,630 Je ne sais pas si vous savez ce que cela signifie ici, 882 01:04:24,630 --> 01:04:26,750 Mach-O binaire universel avec 2 architectures. 883 01:04:26,750 --> 01:04:30,470 Il ya 2 types de processeurs possibles dans Mac, 884 01:04:30,470 --> 01:04:34,780 et certains programmes ont été écrits pour être en mesure d'exécuter à la fois, 885 01:04:34,780 --> 01:04:37,950 et la commande de fichier peut déterminer que, si c'est ce que cela signifie. 886 01:04:37,950 --> 01:04:40,660 Ces deux fichiers ont été écrites de cette façon. 887 01:04:40,660 --> 01:04:43,760 Ainsi, nous voyons comment l'alias fonctionne, nous voyons comment le backquote fonctionne, 888 01:04:43,760 --> 01:04:48,640 nous voyons comment les ls de fichiers réels ou fichier fonctionne. 889 01:04:52,050 --> 01:04:57,000 Cela pourrait ne pas fonctionner. Essayez "où où" et "lwh où". Bon, essayons cela. 890 01:04:57,000 --> 01:05:01,040 où où. 891 01:05:01,040 --> 01:05:03,500 où est un shell intégré. 892 01:05:03,500 --> 01:05:06,970 Rappelez-vous plus tôt, nous a montré que Bash n'a pas encore où. 893 01:05:06,970 --> 01:05:10,080 Si vous tapez où dans le shell Bash, vous obtenez un message d'erreur. 894 01:05:10,080 --> 01:05:12,540 C'est juste une partie de la coque plutôt que d'être une commande séparée. 895 01:05:12,540 --> 01:05:20,000 Qu'advient-il si je tape lwh recherche d'où? Voir ce qui se passe là-bas. 896 01:05:20,000 --> 01:05:22,850 Ran où où, obtenu cette sortie, puis essayé de lancer la commande ls 897 01:05:22,850 --> 01:05:25,600 comme l endroit où est une coquille intégré. 898 01:05:25,600 --> 01:05:28,790 où est là, mais les autres n'existent pas. 899 01:05:28,790 --> 01:05:32,090 Aucune de ces n'existe, en fait. 900 01:05:32,090 --> 01:05:35,560 Donc, cela ne fonctionne pas toujours, et il illustre également comment certaines choses 901 01:05:35,560 --> 01:05:39,580 ne faites pas tout à fait ce que vous pourriez avoir pensé. 902 01:05:40,930 --> 01:05:43,010 Allons un peu plus loin ici. 903 01:05:44,890 --> 01:05:54,760 Ici, c'est dans Bash. C'est aussi la substitution de commande comme la backquote. 904 01:05:54,760 --> 01:06:05,280 Mais contrairement backquote, il utilise cette section variable. 905 01:06:05,280 --> 01:06:09,860 Il ya un certain nombre d'expressions qui commencent par un signe dollar, 906 01:06:09,860 --> 01:06:16,070 et tandis que ceux-ci ne sont pas des variables, ils ont emprunté l'usage du signe de dollar 907 01:06:16,070 --> 01:06:19,570 pour indiquer une expression d'une certaine sorte. 908 01:06:19,570 --> 01:06:23,550 Cela peut être entouré par des parenthèses ou des crochets ou des parenthèses doubles, 909 01:06:23,550 --> 01:06:26,320 qui a un but différent. 910 01:06:26,320 --> 01:06:29,500 Parenthèses simples sont ici une substitution de commande, tout comme les apostrophes inverses. 911 01:06:29,500 --> 01:06:32,720 Les doubles parenthèses est en fait une opération arithmétique. 912 01:06:32,720 --> 01:06:35,380 Il existe d'autres syntaxes, d'autres opérations. 913 01:06:35,380 --> 01:06:41,520 Syntaxe backquote est disponible dans Bash. 914 01:06:41,520 --> 01:06:46,780 Toutefois, celui-ci est préférable. C'est beaucoup plus facile à lire et il permet de nidification. 915 01:06:46,780 --> 01:06:51,300 Vous pouvez avoir à l'intérieur $ (commande) une autre commande, 916 01:06:51,300 --> 01:06:54,590 quelque chose comme - 917 01:07:14,560 --> 01:07:18,210 Je reçois une liste il. 918 01:07:18,210 --> 01:07:21,670 Cela fonctionne si j'avais le backquote aussi. 919 01:07:32,050 --> 01:07:38,470 Que faire si je veux faire quelque chose comme - 920 01:08:03,390 --> 01:08:06,430 Vous n'auriez probablement pas réellement utiliser cette commande, 921 01:08:06,430 --> 01:08:14,160 mais cette substitution de commande interne reprend les noms de tous les fichiers commençant par un, 922 01:08:14,160 --> 01:08:18,229 puis celui-ci s'exécute ls-l sur ces fichiers, 923 01:08:18,229 --> 01:08:20,500 et puis celui-ci fait écho juste la sortie. 924 01:08:21,729 --> 01:08:24,479 Vous n'auriez probablement pas le faire, vous souhaitez simplement faire l'écho ou ls, 925 01:08:24,479 --> 01:08:29,450 mais ceci illustre comment l'imbrication de commandes fonctionne. 926 01:08:29,450 --> 01:08:34,380 Alors juste une autre option ici. 927 01:08:34,380 --> 01:08:37,450  Je l'ai mentionné plus tôt, que lorsque vous avez où dans le C-shell, 928 01:08:37,450 --> 01:08:42,770 tapez œuvres dans les coquilles de type Bourne pour les commandes de localisation. 929 01:08:48,939 --> 01:08:52,270 Les commandes intégrées, tout ce que je faisais là disent. 930 01:08:52,270 --> 01:08:54,640 Les commandes sont partie de la coque, comme l'endroit où. 931 01:08:54,640 --> 01:08:59,880 Quand le shell exécute une commande comme ls, il localise à travers le chemin, 932 01:08:59,880 --> 01:09:03,029 trouve dans un répertoire quelque part, 933 01:09:03,029 --> 01:09:05,800 lit que dans la mémoire, crée un nouveau shell, 934 01:09:05,800 --> 01:09:08,960 lit la commande ls ou quoi que dans la coquille 935 01:09:08,960 --> 01:09:11,450 où les variables d'environnement se trouvent déjà, 936 01:09:11,450 --> 01:09:14,000 puis il transfère l'exécution à elle. 937 01:09:14,000 --> 01:09:18,319 Commande intégrée, le code de cette commande est à l'intérieur de la coque, 938 01:09:18,319 --> 01:09:21,460 si la coquille commence juste exécuter une partie de son propre code. 939 01:09:21,460 --> 01:09:24,569 où une telle commande. Il se fait plus rapide. 940 01:09:24,569 --> 01:09:28,380 Il n'a pas besoin de lire quoi que ce soit dans la mémoire, c'est déjà en mémoire. 941 01:09:28,380 --> 01:09:32,460 Les commandes intégrées ont toujours la priorité sur les commandes avec le même nom. 942 01:09:32,460 --> 01:09:36,050 Les commandes qui sont dans des répertoires dans le chemin peuvent avoir le même nom, 943 01:09:36,050 --> 01:09:39,090 commandes dans des répertoires différents, les fichiers dans des répertoires différents. 944 01:09:39,090 --> 01:09:41,740 Celui qui se produit plus tôt dans le chemin est celui que vous aurez. 945 01:09:41,740 --> 01:09:43,770 Si il est une commande intégrée, vous obtenez toujours. 946 01:09:43,770 --> 01:09:47,890 Il n'y a pas moyen de lui donner une priorité inférieure à celle d'une commande dans le chemin. 947 01:09:47,890 --> 01:09:54,140 Si vous souhaitez obtenir cette commande de chemin, vous pouvez taper le chemin complet. 948 01:09:54,140 --> 01:09:55,850 S'il y avait une commande où dans le chemin, quelque part, 949 01:09:55,850 --> 01:09:58,440 vous pouvez taper / bin / où et vous souhaitez obtenir. 950 01:09:58,440 --> 01:10:01,800 Si vous ne voulez pas taper le chemin d'accès, vous pouvez définir un alias. 951 01:10:01,800 --> 01:10:06,310 En fait, si vous avez donné l'alias du même nom que la commande intégrée, cela fonctionnerait 952 01:10:06,310 --> 01:10:08,790 parce que la définition d'alias est évaluée 953 01:10:08,790 --> 01:10:13,220 avant que le shell détermine qu'il s'agit d'une commande intégrée qui doit être exécuté. 954 01:10:18,810 --> 01:10:23,440 Ensuite, cela devient un peu plus compliqué avec quelques commandes ici. 955 01:10:23,440 --> 01:10:29,880 Le cas de certaines commandes sont en fait intégré dans les commandes et dans le chemin. 956 01:10:29,880 --> 01:10:34,140 L'un d'eux est l'écho, la commande que je viens d'utiliser il ya un peu de tout dans ces exemples. 957 01:10:34,140 --> 01:10:37,410 Echo est une commande dans le chemin et c'est dans chaque coquille. 958 01:10:37,410 --> 01:10:40,580 Ils ne comportent pas nécessairement tous de la même façon. 959 01:10:40,580 --> 01:10:42,970 Il était à l'origine une commande que dans le chemin. 960 01:10:42,970 --> 01:10:45,280 Il a été construit dans les coquilles plus tard. 961 01:10:45,280 --> 01:10:48,080 Parce qu'il existe des options qui dépendent de l'environnement 962 01:10:48,080 --> 01:10:52,970 et les options de ligne de commande, les commandes intégrées 963 01:10:52,970 --> 01:10:57,030 ont été écrites pour fonctionner même que la commande qui avait été dans le chemin, 964 01:10:57,030 --> 01:10:59,670 il est peu probable qu'elles aient été écrites de cette façon 965 01:10:59,670 --> 01:11:01,720 si la commande n'avait pas déjà été écrite pour le chemin. 966 01:11:01,720 --> 01:11:06,180 Ainsi, cela a des effets secondaires. Son histoire a des effets ici. 967 01:11:06,180 --> 01:11:08,380 Il ya des options là-bas. 968 01:11:14,280 --> 01:11:23,060 Il ya aussi une option définie par une variable dans le tcsh appelé echo_style. 969 01:11:23,060 --> 01:11:27,700 C'est une de ces variables qui peuvent changer la façon dont les œuvres font écho. 970 01:11:27,700 --> 01:11:30,910 Il existe d'autres cas dans lesquels vous pouvez affecter une variable 971 01:11:30,910 --> 01:11:36,290 qui change la façon dont l'opération de coque, y compris une commande intégrée, fonctionne. 972 01:11:36,290 --> 01:11:38,130 Il ne serait pas affecter quoi que ce soit d'autre 973 01:11:38,130 --> 01:11:40,640 car d'autres commandes n'ont pas accès aux variables shell, 974 01:11:40,640 --> 01:11:42,090 seules les variables d'environnement. 975 01:11:42,090 --> 01:11:45,360 Mais les opérations de coquille peuvent lire les variables shell. 976 01:11:45,360 --> 01:11:50,710 Cela ne marchera pas pour csh. C'est seulement tcsh. C'est l'une des améliorations. 977 01:11:58,540 --> 01:12:04,620 Analyse possède des séquences lors de l'évaluation des méta-caractères, 978 01:12:04,620 --> 01:12:08,140 lors de l'évaluation des variables, des alias, des références historiques. 979 01:12:08,140 --> 01:12:11,830 Il ya une séquence particulière pour ces choses. 980 01:12:11,830 --> 01:12:13,730 Si elle fait les choses dans un ordre particulier 981 01:12:13,730 --> 01:12:16,080 et arrive à quelque chose qui est l'expression d'une sorte 982 01:12:16,080 --> 01:12:20,650 qui a déjà été évalué, il ne sera pas à nouveau l'évaluer. 983 01:12:20,650 --> 01:12:24,520 Si elle l'obtient, alors il suffit de passer sur les personnages. 984 01:12:24,520 --> 01:12:29,920 Donc, si l'évaluation de certaines expressions comme la substitution de commande 985 01:12:29,920 --> 01:12:36,850 ou variables ou autre chose donne lieu à une expression 986 01:12:36,850 --> 01:12:39,240 qui vous voulez être évalué, 987 01:12:39,240 --> 01:12:42,510 qui ne fonctionnera que si cette évaluation a lieu plus tard dans la séquence. 988 01:12:42,510 --> 01:12:45,010 J'espère que je suis d'être clair là-bas. 989 01:12:45,010 --> 01:12:50,460 Cette séquence d'analyse, une opération dans le C-coquille, 990 01:12:50,460 --> 01:12:56,490 n'est pas la même pour les commandes intégrées que pour les non-intégrés dans les commandes. 991 01:12:56,490 --> 01:12:58,890 Je ne suis pas sûr de Bash il. 992 01:12:58,890 --> 01:13:02,450 Par exemple, si une variable de shell produit une référence de l'histoire, 993 01:13:02,450 --> 01:13:04,230 il ne serait probablement pas revenir dans l'histoire. 994 01:13:04,230 --> 01:13:06,010 Il serait tout simplement obtenir le point d'exclamation. 995 01:13:06,010 --> 01:13:08,840 En fait, nous pouvons juste essayer cela en ce moment. 996 01:13:09,720 --> 01:13:18,240 définir un = et nous devrons mettre cela en là. 997 01:13:30,690 --> 01:13:34,580 Oh, attendez. Désolé. Je l'ai fait dans le coup. Je voulais le faire ici. 998 01:13:53,470 --> 01:13:56,080 Voir, de sorte qu'il n'a pas évalué que la référence de l'histoire 999 01:13:56,080 --> 01:14:00,520 car il était déjà passé le point de l'évaluation des expressions d'histoire 1000 01:14:00,520 --> 01:14:02,720 lorsqu'il a évalué la variable. 1001 01:14:02,720 --> 01:14:05,550 C'est donc une effet de l'analyse. 1002 01:14:05,550 --> 01:14:08,760 Et encore une fois, les commandes intégrées ne sont pas faites de la même façon. 1003 01:14:08,760 --> 01:14:11,230 Très bien. Allons à la prochaine ici. 1004 01:14:11,230 --> 01:14:16,060 Ceci est destiné à être une ligne, mais c'est ce qui rend plus facile à lire. 1005 01:14:19,130 --> 01:14:21,530 Qu'est-ce que faire? 1006 01:14:21,530 --> 01:14:28,640 Vous vous souviendrez que nous pouvons évaluer des astérisques comme caractères génériques de noms de fichiers, 1007 01:14:28,640 --> 01:14:33,890 et il ya d'autres caractères génériques de noms de fichiers comme le point d'interrogation et les expressions entre crochets. 1008 01:14:33,890 --> 01:14:39,000 Ce type d'évaluation est appelé globbing. 1009 01:14:39,000 --> 01:14:46,290 mettre noglob au début de cette commande dit de ne pas le faire. 1010 01:14:46,290 --> 01:14:53,370 noglob unset dit retourner à le faire. 1011 01:14:53,370 --> 01:14:56,440 Remarquer que le glob n'aurait pas cet effet. 1012 01:14:56,440 --> 01:15:00,800 Dans le langage ordinaire, mis glob ou noglob unset semblent être équivalent, 1013 01:15:00,800 --> 01:15:03,290 mais ici il n'est pas. C'est noglob arrêt. 1014 01:15:05,120 --> 01:15:07,910 Maintenant tset. tset resta ensemble terminal. 1015 01:15:07,910 --> 01:15:11,840 Il n'est pas utilisé que souvent maintenant, mais avant que les systèmes de fenêtrage sont devenus disponibles 1016 01:15:11,840 --> 01:15:15,760 et vous aviez un seul terminal, vous pourriez avoir à déterminer le type. 1017 01:15:15,760 --> 01:15:18,700 Et si quelque chose venait sur un réseau Ethernet ou à partir du réseau, 1018 01:15:18,700 --> 01:15:21,120 vous pouvez dire que c'est un vt100. 1019 01:15:21,120 --> 01:15:26,630 VT100 est une sorte de norme dans le secteur de la borne. Il provient de la borne DÉC. 1020 01:15:26,630 --> 01:15:35,270 Si vous faites juste commuté - remarquer que? Cela remonte une manières, hein? 1021 01:15:35,270 --> 01:15:39,520 Donc, si nous ne le tSET ici, 1022 01:15:39,520 --> 01:15:45,250 si je fais juste tset, c'est réinitialiser mon terminal, mais vous ne verrez rien. 1023 01:15:45,250 --> 01:15:47,340 Il n'a pas vraiment changé quoi que ce soit. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Très bien. 1026 01:15:51,480 --> 01:15:53,350 xterm-color setenv TERM. 1027 01:15:53,350 --> 01:15:57,080 Nous savons déjà que le terme a été mis de cette façon, cela ne change rien. 1028 01:15:57,080 --> 01:15:58,860 C'est la façon dont nous avions envie de faire. 1029 01:15:58,860 --> 01:16:07,080 Mais remarquez que cette commande, tset-s, juste sortie de ces commandes. Il ne les a pas exécuté. 1030 01:16:07,080 --> 01:16:09,770 Il n'a pas couru ces commandes, il les sortir. 1031 01:16:09,770 --> 01:16:13,650 Donc, cela est destiné à produire des commandes qui seront ensuite exécutés. 1032 01:16:13,650 --> 01:16:16,360 Vous vous souvenez de la commande dans ce fichier que je viens de montré que vous aviez un Q en elle. 1033 01:16:16,360 --> 01:16:18,910 Alors faisons-le. 1034 01:16:18,910 --> 01:16:23,750 Le Q supprime certaines sorties, mais qui n'a pas d'importance ici, comme vous pouvez le voir. 1035 01:16:23,750 --> 01:16:27,980 Je fais juste cela pour vous montrer que ce n'était pas grave. 1036 01:16:27,980 --> 01:16:31,870 C'est dans la syntaxe backquote. 1037 01:16:31,870 --> 01:16:35,340 Notez le backquote ici, backquote ici. 1038 01:16:35,340 --> 01:16:37,680 Je suis en omettant ces choses ici. 1039 01:16:37,680 --> 01:16:39,570 Ce sont des cas de dire quoi faire 1040 01:16:39,570 --> 01:16:42,050 dans le cas de certains types de terminaux - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, réseau, accès à distance, ce que vous avez. 1042 01:16:45,400 --> 01:16:48,050 Il n'a pas d'importance ici parce que nous ne sommes pas en train de faire aucune de ces choses. 1043 01:16:48,050 --> 01:16:49,720 Je suis juste illustrant la commande. 1044 01:16:49,720 --> 01:16:55,170 Si je fais cela avec le backquote, que vais-je obtenir? 1045 01:16:55,170 --> 01:17:00,210 Notez également ici que cela comprenait l'ensemble noglob et la noglob détruite, 1046 01:17:00,210 --> 01:17:02,630 si ceux-ci sont désormais superflues dans la définition. 1047 01:17:02,630 --> 01:17:05,380 Ce n'était pas toujours vrai, mais maintenant, ils sont inclus dans cette commande. 1048 01:17:05,380 --> 01:17:08,890 Mais voyons ce qui se passe si je fais ça 1049 01:17:08,890 --> 01:17:12,570 et je vais au début de la ligne avec la commande A et je le fais. 1050 01:17:14,380 --> 01:17:18,040 Bon, set: Command not found. C'est un peu bizarre, n'est-ce pas? 1051 01:17:18,040 --> 01:17:20,570 ensemble est une commande bien connue. Il fait partie de la coque. 1052 01:17:20,570 --> 01:17:24,040 set: Command not found? Pourquoi est-ce? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Eh bien, nous allons réfléchir à ce sujet. 1054 01:17:26,790 --> 01:17:31,100 Il est d'exécuter une commande de substitution backquote, 1055 01:17:31,100 --> 01:17:37,430 et qui est provoquée par une certaine partie de la séquence d'analyse syntaxique de la commande. 1056 01:17:37,430 --> 01:17:40,360 ensemble est une commande intégrée. 1057 01:17:40,360 --> 01:17:43,900 Donc, au moment où il fait que la substitution de commande, 1058 01:17:43,900 --> 01:17:48,280 il a déjà obtenu après le point de l'identification des commandes intégrées. 1059 01:17:48,280 --> 01:17:51,900 Ainsi, il traite définir comme s'il s'agissait d'une commande dans le chemin. 1060 01:17:51,900 --> 01:17:55,440 Inutile de dire, il ne le trouve pas et vous obtenez une erreur. 1061 01:17:55,440 --> 01:17:59,300 Eh bien. Il ya un exemple de séquence d'analyse. 1062 01:17:59,300 --> 01:18:01,460 Et que faisons-nous à ce sujet? 1063 01:18:01,460 --> 01:18:04,800 Notez cette commande très intéressant ici, eval. 1064 01:18:04,800 --> 01:18:06,530 Je me demande ce que cela fait. 1065 01:18:06,530 --> 01:18:08,760 Si vous regardez le manuel - et nous allons juste faire que 1066 01:18:08,760 --> 01:18:12,000 pour montrer comment la confusion de ces manuels sont - 1067 01:18:12,000 --> 01:18:19,400 homme tcsh, manuel confus, trouver des choses ici n'est pas facile non plus. 1068 01:18:19,400 --> 01:18:31,850 On y va, eval arg, afin que nous puissions avoir une ou plusieurs arguments 1069 01:18:31,850 --> 01:18:34,090 et il ya une liste de choses là-bas. 1070 01:18:34,090 --> 01:18:37,730 Traite les arguments que les entrées à la coque 1071 01:18:37,730 --> 01:18:43,600 et exécute les commandes résultant dans le contexte de la coquille en cours. 1072 01:18:43,600 --> 01:18:46,900 Ceci est habituellement utilisé pour exécuter des commandes générées en tant que résultat de la commande 1073 01:18:46,900 --> 01:18:51,310 ou la substitution de variable parce analyse se produit avant ces substitutions. 1074 01:18:51,310 --> 01:18:52,580 Très bon. 1075 01:18:52,580 --> 01:18:54,740 Et ici, ils se réfèrent encore à la commande tset pour une utilisation de l'échantillon 1076 01:18:54,740 --> 01:18:57,700 comme celui que je viens de vous montrer. 1077 01:18:57,700 --> 01:19:00,440 Maintenant, je dois obtenir la fenêtre arrière à un endroit utile. 1078 01:19:03,150 --> 01:19:07,800 Soyons ici et nous verrons que eval est utilisé juste avant que. 1079 01:19:07,800 --> 01:19:14,010 Voyons donc ce qui se passe si nous mettons - nous voilà avec les flèches de cette commande 1080 01:19:14,010 --> 01:19:20,940 et de contrôle A au début, eval. 1081 01:19:20,940 --> 01:19:22,850 Bon, alors cela fonctionne. 1082 01:19:22,850 --> 01:19:26,440 Quand vous faites eval, il prend ce qui vient après et fait une commande. 1083 01:19:26,440 --> 01:19:29,460 Cela vous permet d'analyser des essentiellement deux fois. 1084 01:19:29,460 --> 01:19:33,710 La section ici exécute cette commande à l'intérieur des apostrophes inverses, 1085 01:19:33,710 --> 01:19:36,210 reçoit la sortie. 1086 01:19:36,210 --> 01:19:42,850 La sortie est censé être géré comme ces commandes ici, comme les 1087 01:19:42,850 --> 01:19:45,890 à celui-ci et à celui-ci. 1088 01:19:45,890 --> 01:19:50,100 Donc, ces commandes sont maintenant ici, dans cette séquence, 1089 01:19:50,100 --> 01:19:58,950 mais ceux-ci sont intégrés dans les commandes et il ne peut pas les obtenir tout de suite. 1090 01:19:58,950 --> 01:20:06,440 Donc, nous allons à eval, eval prend ça, commence le tout une fois de plus, et cela fonctionne. 1091 01:20:06,440 --> 01:20:18,460 Un exemple à la fois de backquoting, eval, l'analyse, les conséquences de l'analyse, 1092 01:20:18,460 --> 01:20:21,910 et une commande qui est probablement de très peu d'utilité pour vous aujourd'hui. 1093 01:20:21,910 --> 01:20:25,540 Très bien. Tout droit, umask. 1094 01:20:25,540 --> 01:20:32,160 Regardons cette commande ici, umask 022. Je me demande ce que cela fait. 1095 01:20:32,160 --> 01:20:38,420 Disons simplement entrez umask avec rien après. 22. Très bien. 1096 01:20:38,420 --> 01:20:44,350 022 et le faire à nouveau. 1097 01:20:44,350 --> 01:20:48,580 Comme vous l'aurez deviné, umask sans arguments vous indique le masque en cours; 1098 01:20:48,580 --> 01:20:51,760 umask avec des arguments fait-il que, mais c'était celui que j'avais déjà. 1099 01:20:51,760 --> 01:20:53,800 Qu'est-ce que 022 signifie? 1100 01:21:01,650 --> 01:21:07,080 Ce sont ici les protections d'un fichier. 1101 01:21:07,080 --> 01:21:11,440 Ils déterminent qui est autorisé à lire ou écrire ou exécuter le fichier. 1102 01:21:11,440 --> 01:21:16,560 Les protections sont également appelés autorisations. 1103 01:21:16,560 --> 01:21:21,390 Le r signifie lecture, w pour écriture, 1104 01:21:21,390 --> 01:21:25,500 et x, qui n'est pas présent, il, est synonyme de s'exécuter. 1105 01:21:25,500 --> 01:21:27,260 Il ya 3 catégories là. 1106 01:21:27,260 --> 01:21:33,540 Les trois derniers éléments se trouvent dans la catégorie de l'utilisateur. Ceux s'appliquent à moi, l'utilisateur. 1107 01:21:33,540 --> 01:21:36,870 Ces 3 ici s'appliquent au groupe. 1108 01:21:36,870 --> 01:21:41,590 Le fichier appartient au groupe 1, l'utilisateur peut appartenir à plusieurs groupes, 1109 01:21:41,590 --> 01:21:47,150 mais si l'utilisateur est dans le groupe auquel appartient ce fichier, 1110 01:21:47,150 --> 01:21:51,090 alors ces protections s'appliqueront à lui s'il n'est pas l'utilisateur. 1111 01:21:51,090 --> 01:21:54,230 Et celui-ci est tout le monde. 1112 01:21:55,540 --> 01:21:57,690 Ces catégories sont mutuellement exclusives. 1113 01:21:57,690 --> 01:21:59,750 Les protections d'utilisation s'appliquent à lui, 1114 01:21:59,750 --> 01:22:03,780 les protections de groupe s'appliquent aux membres du groupe autres que l'utilisateur, 1115 01:22:03,780 --> 01:22:08,110 et les autres mesures de protection s'appliquent uniquement aux personnes autres que l'utilisateur et les membres du groupe. 1116 01:22:08,110 --> 01:22:12,320 S'il ya un r ou w ou x, cela signifie que la protection est accordée. 1117 01:22:12,320 --> 01:22:13,950 S'il ya un trait d'union, cela signifie qu'il n'est pas. 1118 01:22:13,950 --> 01:22:16,690 Il ya effectivement d'autres choses qui peuvent être mises en voici d'ailleurs ceux-ci, 1119 01:22:16,690 --> 01:22:18,350 je ne vais pas entrer dans l'entreprise. 1120 01:22:18,350 --> 01:22:24,450 Ce masque définit une valeur par défaut pour les fichiers que vous créez. 1121 01:22:24,450 --> 01:22:28,580 Et comme un masque, fondamentalement, il dit les bits que vous ne définissez pas. 1122 01:22:28,580 --> 01:22:30,450 Comment est-ce devenu morceaux? 1123 01:22:30,450 --> 01:22:33,240 Si vous pensez que chacun de ces comme un nombre octal, 1124 01:22:33,240 --> 01:22:42,120 il s'agit du bit de 1, c'est 2s, ce sont les 4s. 1125 01:22:42,120 --> 01:22:45,840 Donc, de 0 à 7 1126 01:22:45,840 --> 01:22:51,770 décrira la combinaison de R, w de, et des x que vous avez pour ces 3 1127 01:22:51,770 --> 01:22:53,710 puis un nombre similaire de ceux-ci et ensuite pour ces derniers. 1128 01:22:53,710 --> 01:23:12,030 Donc 022 signifie 0 pour l'autre, pour le groupe 2, 2 pour l'utilisateur. 1129 01:23:12,030 --> 01:23:15,870 Mais c'est un masque. Le masque est ce que vous n'avez pas. 1130 01:23:19,380 --> 01:23:20,610 Je suis désolé. Je vous ai donné les choses dans le mauvais ordre. 1131 01:23:20,610 --> 01:23:25,620 C'est la première 3. Ces 3 sont l'utilisateur, ces 3 sont le groupe, ces 3 sont les autres. 1132 01:23:25,620 --> 01:23:27,970 Désolé je vous ai donné les dans le mauvais ordre. 1133 01:23:27,970 --> 01:23:31,910 Le 0, qui est le premier de ceux-ci, n'affiche pas la valeur, 1134 01:23:31,910 --> 01:23:35,430 mais si un nombre n'est pas là, c'est un 0. 1135 01:23:35,430 --> 01:23:38,370 Cela signifie que tous les trois de ces seraient autorisés. 1136 01:23:38,370 --> 01:23:41,550 Notez que dans ce cas particulier x n'est pas autorisé. 1137 01:23:41,550 --> 01:23:44,090 La raison en est que l'enveloppe est capable de déterminer 1138 01:23:44,090 --> 01:23:46,260 si un fichier doit être exécuté ou non. 1139 01:23:46,260 --> 01:23:49,800 Comme ce n'est pas un fichier exécutable, il n'a pas mis le x. 1140 01:23:49,800 --> 01:23:54,000 Les deux moyens qui écrivent l'autorisation, la deuxième catégorie ici, 1141 01:23:54,000 --> 01:23:56,500 l'un au milieu, est refusé. 1142 01:23:56,500 --> 01:23:58,500 Encore une fois, ce sont les choses qu'il a nié. 1143 01:23:58,500 --> 01:24:02,080 Eh bien, x est autorisé, mais ce n'est pas ici, car ce n'est pas exécutable 1144 01:24:02,080 --> 01:24:04,260 et de même pour les autres. 1145 01:24:04,260 --> 01:24:08,880 C'est donc un umask commun. 1146 01:24:08,880 --> 01:24:14,630 Un autre commune est de 700 - vous donner tout et personne d'autre chose. 1147 01:24:14,630 --> 01:24:17,040 Et il ya d'autres possibilités. 1148 01:24:21,340 --> 01:24:27,110 Je vais revenir. Utilisation de l'histoire, je peux chercher dos pour que, lwh y. 1149 01:24:27,110 --> 01:24:30,210 Très bien. Donc, ici, ce sont les coquilles. 1150 01:24:30,210 --> 01:24:36,020 Bash, le propriétaire qui est le compte système, peut tout faire. 1151 01:24:36,020 --> 01:24:41,210 Groupe et tout le monde peut faire lire ou exécuter mais pas écrire. 1152 01:24:41,210 --> 01:24:44,570 Celui-ci ne permet même pas le propriétaire d'écrire dessus. 1153 01:24:44,570 --> 01:24:46,460 Si le propriétaire a voulu écrire, le compte système, 1154 01:24:46,460 --> 01:24:48,020 il faudrait changer la protection. 1155 01:24:48,020 --> 01:24:53,940 Mais encore une fois, le umask définit la valeur par défaut en le masquant, 1156 01:24:53,940 --> 01:24:57,160 en indiquant les bits qui ne seront pas fixés. 1157 01:24:57,160 --> 01:25:04,380 C'est typiquement dans un de vos fichiers d'initialisation, qui est l'. Cshrc pour le C-shell 1158 01:25:04,380 --> 01:25:07,500 ou le profil pour les shells de type Bourne type.. 1159 01:25:07,500 --> 01:25:12,520 Il peut être d'ailleurs également si d'autres fichiers d'initialisation du système. 1160 01:25:12,520 --> 01:25:14,610 Quoi qu'il en soit, c'est umask. 1161 01:25:14,610 --> 01:25:18,180 Il ya quelque chose un peu bizarre ici, 1162 01:25:18,180 --> 01:25:22,800 et c'est pourquoi il ya une seule commande pour cela? 1163 01:25:22,800 --> 01:25:28,690 Si j'écrivais cela, je voudrais faire une variable, umask = une certaine valeur. 1164 01:25:28,690 --> 01:25:31,100 Pourquoi est-il une commande tout juste à cet effet? 1165 01:25:31,100 --> 01:25:34,560 La raison en est ce va juste retour aux origines de Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix était un certain projet de programmation de Bell Labs dans les années 1970. 1167 01:25:41,050 --> 01:25:42,610 Les gens se sont réunis pour le programme. 1168 01:25:42,610 --> 01:25:45,290 Ils n'ont jamais voulu qu'il devienne un système d'exploitation dans le monde entier. 1169 01:25:45,290 --> 01:25:47,250 Différentes personnes ont écrit les différentes parties sans penser beaucoup 1170 01:25:47,250 --> 01:25:49,790 de la façon dont ils allaient être utilisé - plutôt sommaires. 1171 01:25:49,790 --> 01:25:53,290 Et il est venu ensemble comme ça, et c'est encore comme ça à certains égards. 1172 01:25:53,290 --> 01:25:57,930 Alors que reflète l'histoire, et il ya encore ces incohérences et éléments impairs de lui. 1173 01:25:57,930 --> 01:26:00,750 Très bien. Suivant un ici. 1174 01:26:08,170 --> 01:26:11,000 Comme je l'ai écrit plus haut, le C-shell n'est pas vraiment beaucoup utilisé pour la programmation, 1175 01:26:11,000 --> 01:26:12,420 bien qu'elle puisse être. 1176 01:26:12,420 --> 01:26:15,080 Il exécute plus lentement, encore une fois le compromis entre l'utilisation interactive, 1177 01:26:15,080 --> 01:26:17,820 qui a plus de traitement impliqué que la vitesse, 1178 01:26:17,820 --> 01:26:20,710 qui peut faire sans le traitement. 1179 01:26:20,710 --> 01:26:28,320 Les fonctionnalités supplémentaires ajoutées à la Bourne shell par Korn et Bourne-Again coquilles 1180 01:26:28,320 --> 01:26:32,120 ne semble pas les ralentir, et je ne sais pas pourquoi. 1181 01:26:32,120 --> 01:26:36,310 Il pourrait juste être une meilleure programmation, mais je ne suis pas en mesure de savoir. 1182 01:26:36,310 --> 01:26:40,420 Accélérer ici est en fait pas une grosse affaire, bien qu'il soit mentionné. 1183 01:26:40,420 --> 01:26:43,690 La raison en est que les scripts shell se fait assez rapidement. 1184 01:26:43,690 --> 01:26:46,450 Si il ya beaucoup de commandes comme dans un programme de calcul, 1185 01:26:46,450 --> 01:26:49,110 vous n'auriez probablement pas le faire dans un script shell. 1186 01:26:49,110 --> 01:26:51,450 Les opérations y sont assez simple et directe. 1187 01:26:51,450 --> 01:26:53,960 Ceux que j'ai expérimentés qui sont trop lents 1188 01:26:53,960 --> 01:26:57,110 impliquer des applications répétées de commandes lents. 1189 01:26:57,110 --> 01:27:00,480 J'ai mentionné plus tôt l'éditeur en flux sed. Cette commande est lente. 1190 01:27:00,480 --> 01:27:03,760 Si vous exécutez plusieurs fois sed, vous obtiendrez un script lent, mais ce n'est pas l'enveloppe qui est lent. 1191 01:27:03,760 --> 01:27:07,920 Courir dans le shell Bourne ne sera pas beaucoup plus rapide que de courir dans le C-shell, 1192 01:27:07,920 --> 01:27:10,070 mais il ya peut-être là quelques avantages. 1193 01:27:10,070 --> 01:27:12,760 Les capacités de programmation supplémentaires, d'autre part, 1194 01:27:12,760 --> 01:27:17,920 sont des raisons importantes pour lesquelles vous souhaitez utiliser les shells de type Bourne type. 1195 01:27:17,920 --> 01:27:21,390 C-shell a des caractéristiques étranges pour elle - 1196 01:27:21,390 --> 01:27:25,250 le fait que vous ne savez pas si une variable est une variable de shell ou une variable d'environnement. 1197 01:27:25,250 --> 01:27:27,440 Il peut être très déroutant. 1198 01:27:27,440 --> 01:27:32,170 Ce n'est pas si facile d'écrire 1199 01:27:32,170 --> 01:27:35,930 juste, fondée sur votre expérience de la programmation dans d'autres langues. 1200 01:27:35,930 --> 01:27:41,350 Je pense que vous pouvez trouver les shells de type Bourne type plus conforme à votre expérience. 1201 01:27:43,730 --> 01:27:49,270 Certains scripts, cependant, peut être des milliers de lignes de longueur. 1202 01:27:49,270 --> 01:27:52,450 Ceux que j'ai vu sont utilisés pour boucher les systèmes d'exploitation. 1203 01:27:52,450 --> 01:27:55,450 Ceux-ci peuvent exécuter très lentement, mais vous ne courez pas ceux qui très souvent. 1204 01:27:55,450 --> 01:27:57,180 C'est seulement quand vous faites correctifs, 1205 01:27:57,180 --> 01:27:59,450 et ce n'est que le gestionnaire de système qui fait ces choses, 1206 01:27:59,450 --> 01:28:01,840 il n'est donc pas vraiment beaucoup d'un problème. 1207 01:28:01,840 --> 01:28:06,980 Ceux qui sont des centaines de lignes de long fait exécuter assez rapidement. 1208 01:28:06,980 --> 01:28:10,540 Mentionner cela ici, ce sont les améliorations? 1209 01:28:10,540 --> 01:28:13,170 J'ai déjà mentionné quelques-uns d'entre eux - les tableaux, les calculs, 1210 01:28:13,170 --> 01:28:20,540 les $ () expression pour les calculs dans le shell Bash, 1211 01:28:20,540 --> 01:28:23,050 l'autre type de substitution de commande. 1212 01:28:23,050 --> 01:28:25,360 Il existe différents types de commandes de test 1213 01:28:25,360 --> 01:28:29,350 par lequel vous pouvez faire des tests à l'existence d'un fichier ou d'autres choses. 1214 01:28:29,350 --> 01:28:34,790 Dernière ici, cette commande ici. 1215 01:28:34,790 --> 01:28:38,480 Qu'est-ce que faire, et pourquoi quelqu'un l'utiliser? 1216 01:28:51,170 --> 01:28:52,990 variablename printenv. 1217 01:28:52,990 --> 01:28:56,130 Nous savons ce que printenv fait. Il nous dit la valeur d'une variable. 1218 01:28:56,130 --> 01:29:00,850 Et variablename printenv ne nous dira pas beaucoup parce qu'il n'y a pas de variable. 1219 01:29:03,550 --> 01:29:05,120 Blank. 1220 01:29:05,120 --> 01:29:08,440 Mais donnons-lui quelque chose de significatif. 1221 01:29:13,420 --> 01:29:16,800 Ce n'est pas là non plus. Très bien. Je suppose que je n'ai jamais défini que. 1222 01:29:16,800 --> 01:29:18,020 Disons simplement vérifier mon environnement. 1223 01:29:18,020 --> 01:29:20,900 C'est une autre commande qui vous permet d'inspecter votre environnement. 1224 01:29:20,900 --> 01:29:24,470 Il est bon vieux EDITOR, celui qu'on a vu avant. 1225 01:29:42,360 --> 01:29:44,120 Qu'est-ce que faire? 1226 01:29:44,120 --> 01:29:48,050 Ici, nous avons une expression backquote. 1227 01:29:48,050 --> 01:29:50,370 N'oubliez pas qu'il s'agit du C-shell. 1228 01:29:50,370 --> 01:29:54,850 Donc EDITOR printenv nous donnera une valeur de EDITOR. C'est vi. 1229 01:29:54,850 --> 01:29:59,790 Et puis il sera mis en valeur que la commande set variable a,. 1230 01:29:59,790 --> 01:30:02,860 Alors maintenant, si je fais un echo $, je reçois vi. 1231 01:30:02,860 --> 01:30:05,850 Cela ne semble pas très utile. 1232 01:30:05,850 --> 01:30:08,080 Cependant, il a bel et bien un but. 1233 01:30:08,080 --> 01:30:12,260 Comme nous ne savons pas si une variable est une variable de shell ou une variable d'environnement 1234 01:30:12,260 --> 01:30:16,280 en utilisant la syntaxe d'évaluation de signe dollar, nous pouvons utiliser printenv 1235 01:30:16,280 --> 01:30:19,460 pour s'assurer que c'est une variable d'environnement. 1236 01:30:19,460 --> 01:30:22,550 Donc, si il y avait une coquille éditeur de variables, cela n'aurait pas eu il. 1237 01:30:22,550 --> 01:30:25,640 Cela fonctionne uniquement avec la variable d'environnement. 1238 01:30:25,640 --> 01:30:28,370 S'il y avait une variable de shell et je voulais sa valeur, 1239 01:30:28,370 --> 01:30:29,980 Je dois trouver une autre façon de le faire. 1240 01:30:29,980 --> 01:30:33,530 Une façon de faire qui serait en faisant ensemble et de la tuyauterie. 1241 01:30:33,530 --> 01:30:36,130 Il s'agit d'un des caractères de remplacement, des caractères spéciaux. 1242 01:30:36,130 --> 01:30:38,370 Il envoie la sortie du jeu à autre chose. 1243 01:30:38,370 --> 01:30:40,650 Voyons ce que nous pourrions y trouver. 1244 01:30:40,650 --> 01:30:49,340 Rien. Très bien. Disons simplement voir ce qui est là tous ensemble. 1245 01:30:49,340 --> 01:30:53,580 C'était echo_style, celui que j'ai mentionné avant. D'accord, faisons-le. 1246 01:31:02,460 --> 01:31:06,230 Se souvenir je l'ai mentionné avant, echo_style 1247 01:31:06,230 --> 01:31:08,410 détermine la façon dont la commande echo sera exécutée. 1248 01:31:08,410 --> 01:31:10,940 bsd signifie Berkeley standard distribution. 1249 01:31:10,940 --> 01:31:13,200 C'est l'Unix de Berkeley dans les années 1970. 1250 01:31:13,200 --> 01:31:16,630 C'est l'un des moyens qui font écho peut fonctionner. 1251 01:31:16,630 --> 01:31:22,310 Réglage echo_style à cette valeur dans le TC-shell fera écho à se comporter de cette façon. 1252 01:31:22,310 --> 01:31:27,670 Ainsi défini ne, mais mis seulement obtient variables shell. 1253 01:31:27,670 --> 01:31:35,430 Il ne serait pas trouver EDITOR, qui n'est pas une variable de shell. 1254 01:31:36,870 --> 01:31:38,050 Rien. 1255 01:31:38,050 --> 01:31:39,660 Donc, c'est une façon de les distinguer. 1256 01:31:39,660 --> 01:31:42,000 Mais le fait que vous devez passer par une certaine maîtrise étrange comme ça 1257 01:31:42,000 --> 01:31:45,500 faire la distinction entre les variables du shell ou les variables d'environnement 1258 01:31:45,500 --> 01:31:49,970 montre le genre de la nature pratique de la C-shell à certaines fins. 1259 01:31:52,290 --> 01:31:57,960 Et maintenant, la dernière et peut-être moins, ce sont les pages de manuel. 1260 01:31:57,960 --> 01:32:03,190 Ceux de qui vous savez peut-être, l'homme est à court de commande pour manuel. 1261 01:32:03,190 --> 01:32:08,610 Les pages de manuel pour les coquilles sont difficiles à lire. Ils sont très long. 1262 01:32:08,610 --> 01:32:14,060 Ils sont organisés d'une manière qui peut rendre difficile de trouver ce que vous cherchez. 1263 01:32:14,060 --> 01:32:15,980 Donc, si vous cherchez quelque chose avec un but, 1264 01:32:15,980 --> 01:32:20,050 vous ne pouvez pas savoir si ce but est une variable de shell ou autre chose, 1265 01:32:20,050 --> 01:32:21,630 de sorte que vous ne pouvez pas savoir où chercher. 1266 01:32:21,630 --> 01:32:25,030 Vous pouvez chercher des différentes chaînes, mais les cordes sont souvent répétées. 1267 01:32:25,030 --> 01:32:27,640 Donc, il est généralement difficile à lire. 1268 01:32:27,640 --> 01:32:33,810 Nous venons de voir la page de manuel TC-shell un peu avant de trouver la commande eval. 1269 01:32:33,810 --> 01:32:36,610 Certaines choses vont plus vite. 1270 01:32:36,610 --> 01:32:38,860 Une approche consiste à rechercher une chaîne. 1271 01:32:38,860 --> 01:32:40,360 Vous pouvez utiliser le pager. 1272 01:32:40,360 --> 01:32:49,080 Pager a la barre pour chercher une commande ou une chaîne dans une opération de pager. 1273 01:32:49,080 --> 01:32:52,830 Man par défaut utilisera pagers, soit plus ou moins. 1274 01:32:52,830 --> 01:32:56,560 Je ne sais pas si vous êtes familier avec ceux-ci, mais celles-ci peuvent afficher les fichiers bit par bit. 1275 01:32:56,560 --> 01:33:00,550 Je me sers de MOINS pour afficher ces fichiers particuliers que nous avons ici. 1276 01:33:00,550 --> 01:33:03,300 Vous pouvez rechercher à l'intérieur il. 1277 01:33:03,300 --> 01:33:04,880 Vous pouvez essayer d'utiliser différentes chaînes de recherche. 1278 01:33:04,880 --> 01:33:08,420 Également les pages de manuel dans différents systèmes d'exploitation peuvent ne pas être la même. 1279 01:33:08,420 --> 01:33:11,130 Ils peuvent être des pages distinctes pour csh et tcsh. 1280 01:33:11,130 --> 01:33:14,500 Ils sont ne sont pas sur le Mac, mais ils pourraient être si ce sont des commandes distinctes. 1281 01:33:14,500 --> 01:33:19,000 Si sh ne vraiment pas appeler Bash, il serait probablement une page de manuel séparé. 1282 01:33:19,000 --> 01:33:25,820 Certains systèmes ont des pages de manuel séparées seulement pour les C-shell commandes intégrées. 1283 01:33:25,820 --> 01:33:30,250 Parfois, si vous voulez lire une description d'une commande intégrée 1284 01:33:30,250 --> 01:33:35,350 c'est aussi dans le chemin, comme l'écho, vous devez lire la page de manuel sur cette commande sur écho 1285 01:33:35,350 --> 01:33:37,610 pour déterminer comment cela va fonctionner comme une commande intégrée 1286 01:33:37,610 --> 01:33:39,760 même si vous n'êtes pas d'appeler la commande intégrée. 1287 01:33:41,630 --> 01:33:46,090 C'est un inconvénient du système d'exploitation en général, non seulement pour les coquilles, 1288 01:33:46,090 --> 01:33:50,710 bien que pour les coques en particulier les pages de manuel sont assez longues, 1289 01:33:50,710 --> 01:33:56,180 en partie parce qu'ils ont ajouté des fonctionnalités utiles pour eux, ce qui peut être positif. 1290 01:33:56,180 --> 01:34:00,290 Très bien. Y at-il des questions? Tous les sujets que vous souhaitez aborder? 1291 01:34:00,290 --> 01:34:03,390 Rien de pertinent ici? 1292 01:34:04,540 --> 01:34:07,100 Eh bien, ça a été très agréable de vous parler tout. 1293 01:34:07,100 --> 01:34:09,690 J'espère que vous avez quelque chose de ce séminaire 1294 01:34:09,690 --> 01:34:13,080 qui seront utiles pour vous dans vos projets futurs. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]