1 00:00:00,000 --> 00:00:02,320 >> [Seminário - Conchas Unix, Ambientes] 2 00:00:02,320 --> 00:00:04,180 [Douglas Kline - Harvard University] 3 00:00:04,180 --> 00:00:07,160 [Isto é CS50. - CS50.TV] 4 00:00:07,160 --> 00:00:12,770 >> Tema de hoje é o shell do Unix. 5 00:00:12,770 --> 00:00:20,600 Estou Douglas Kline, perito, ou pelo menos razoavelmente usuário competente, da shell. 6 00:00:20,600 --> 00:00:25,280 A shell é a interface para o usuário do sistema operacional do computador. 7 00:00:25,280 --> 00:00:29,580 O nome é enganador, como, ao contrário de shell de um animal, 8 00:00:29,580 --> 00:00:34,890 que é dura e protectora, o invólucro do computador permite a comunicação. 9 00:00:34,890 --> 00:00:39,120 Então membrana porosa provavelmente seria uma metáfora melhor. 10 00:00:39,120 --> 00:00:44,500 >> O escudo original para Unix é o shell Bourne. 11 00:00:44,500 --> 00:00:46,450 Bourne está escrito B-O-U-R-N-E. 12 00:00:46,450 --> 00:00:49,770 Bourne foi um dos autores originais do Unix, 13 00:00:49,770 --> 00:00:51,700 e assim que o shell é nomeado após ele. 14 00:00:51,700 --> 00:00:54,850 O nome do que shell como um comando é simplesmente sh. 15 00:00:54,850 --> 00:00:57,400 Esse é o comando que você pode executar. 16 00:00:57,400 --> 00:01:00,810 A casca começa no início da sessão. 17 00:01:00,810 --> 00:01:04,459 Quando você faz logon no computador, o shell só começa a funcionar para você, 18 00:01:04,459 --> 00:01:06,820 e é isso que leva seus comandos. 19 00:01:06,820 --> 00:01:09,790 Ela pode começar em outras ocasiões também. 20 00:01:09,790 --> 00:01:16,780 Se você abrir uma janela com nenhuma outra indicação, ele irá iniciar um shell para você. 21 00:01:16,780 --> 00:01:20,450 É assim que é que você pode ir a uma janela e começar a digitar comandos 22 00:01:20,450 --> 00:01:23,960 e assim por diante lá mesmo que você não se registrar para essa janela. 23 00:01:23,960 --> 00:01:26,670 Além disso, se você fizer um login remoto, 24 00:01:26,670 --> 00:01:30,250 em seguida, ele irá iniciar um shell no computador remoto. 25 00:01:30,250 --> 00:01:44,310 E é possível executar comandos sem um shell interativo. 26 00:01:44,310 --> 00:01:48,990 Isso pode significar dentro de sua operação atual, 27 00:01:48,990 --> 00:01:50,700 e também pode significar uma operação remota. 28 00:01:50,700 --> 00:01:52,900 Você poderia enviar um comando para outro computador, 29 00:01:52,900 --> 00:01:55,460 que inclui iniciar um shell lá. 30 00:01:55,460 --> 00:01:57,760 Na verdade, ele tem de incluir o arranque de uma concha lá 31 00:01:57,760 --> 00:02:01,740 mesmo que isso não é o seu propósito final. 32 00:02:05,310 --> 00:02:12,350 Quando algo começa a ficar assim, isso não significa necessariamente iniciar um novo shell. 33 00:02:12,350 --> 00:02:17,430 Se você abrir uma nova janela, é possível dizer que para abrir um editor 34 00:02:17,430 --> 00:02:18,940 ou algum outro comando. 35 00:02:18,940 --> 00:02:20,560 Nesse caso, o editor vai começar do zero. 36 00:02:20,560 --> 00:02:22,930 Quando a edição termina, a janela termina. 37 00:02:22,930 --> 00:02:24,620 Isto é um pouco incomum, mas isso pode ser feito. 38 00:02:24,620 --> 00:02:27,140 Nesses casos, não será uma concha. 39 00:02:27,140 --> 00:02:31,890 Portanto, não é necessariamente o caso que uma janela ou alguma aplicação trará uma shell. 40 00:02:31,890 --> 00:02:34,030 >> Shell analisa comandos. 41 00:02:34,030 --> 00:02:40,900 Análise significa identificar os vários elementos e classificá-los. 42 00:02:40,900 --> 00:02:43,470 Dentro de um comando, a cadeia completa que você digita, 43 00:02:43,470 --> 00:02:47,310 haverá um ou mais comandos simples a serem executados. 44 00:02:47,310 --> 00:02:50,050 Outros elementos podem ser argumentos. 45 00:02:50,050 --> 00:02:55,020 Também pode haver caracteres especiais que afectam a execução de um comando. 46 00:02:55,020 --> 00:02:59,710 Eles podem enviar a saída em outro lugar que a tela 47 00:02:59,710 --> 00:03:01,750 se o comando normalmente seria enviá-lo para a tela. 48 00:03:01,750 --> 00:03:04,390 Ele pode redirecionar a entrada, que pode fazer outras coisas também. 49 00:03:04,390 --> 00:03:08,120 Existem vários outros símbolos, caracteres, e assim por diante. 50 00:03:08,120 --> 00:03:13,600 Análise envolve detectar e interpretar as coisas. 51 00:03:13,600 --> 00:03:19,560 >> Agora, se não há mais perguntas, o que é bastante provável, já que não há mais pessoas, 52 00:03:19,560 --> 00:03:24,620 vamos passar a minha próxima página aqui. 53 00:03:24,620 --> 00:03:29,170 >> Eu disse anteriormente que o shell Bourne é o shell inicial. 54 00:03:29,170 --> 00:03:31,550 Há outros. 55 00:03:31,550 --> 00:03:34,520 Um deles é o C-shell. O comando é csh. 56 00:03:34,520 --> 00:03:36,830 O nome C-shell é apenas um jogo de palavras. 57 00:03:36,830 --> 00:03:41,260 Este escudo foi introduzido com Berkeley Unix, em meados da década de 1970. 58 00:03:41,260 --> 00:03:44,830 Berkeley Unix foi um acontecimento decisivo no desenvolvimento de Unix. 59 00:03:44,830 --> 00:03:48,770 Foi uma grande revolução e incluiu a introdução deste shell. 60 00:03:48,770 --> 00:03:50,790 A razão para que o jogo de palavras, C-shell, 61 00:03:50,790 --> 00:03:56,490 é que o C-shell tem algumas características nele que se assemelham a linguagem C, 62 00:03:56,490 --> 00:03:59,740 qual o shell Bourne não tem - 63 00:03:59,740 --> 00:04:02,140 ou ele não tinha na época. 64 00:04:02,140 --> 00:04:05,190 Há também o TC-shell. 65 00:04:05,190 --> 00:04:07,360 Este é um superconjunto do C-shell. 66 00:04:07,360 --> 00:04:11,470 Ele tem características adicionais, muitos dos quais são úteis para o uso interativo, 67 00:04:11,470 --> 00:04:16,050 tal como recordando comandos no mecanismo de histórico, 68 00:04:16,050 --> 00:04:18,459 que eu vou descrever um pouco mais tarde - 69 00:04:18,459 --> 00:04:23,120 de uma forma simples, modelado após um editor. 70 00:04:23,120 --> 00:04:29,170 Ele também tem ligações que lhe permitem ligar uma string chave curta para um comando mais longo. 71 00:04:29,170 --> 00:04:31,440 Nós não vamos estar recebendo em que hoje. 72 00:04:31,440 --> 00:04:33,650 Ele tem algumas características que são úteis para a programação. 73 00:04:33,650 --> 00:04:37,020 No entanto, o C-shell não é frequentemente utilizado para programação shell. 74 00:04:37,020 --> 00:04:39,080 Programas Shell, se você já não soubesse, 75 00:04:39,080 --> 00:04:41,690 são programas que consistem em características de fachada. 76 00:04:41,690 --> 00:04:43,220 Você pode executar estes como programas. 77 00:04:43,220 --> 00:04:46,760 Você escreve um monte de comandos shell em um arquivo e executar o arquivo. 78 00:04:46,760 --> 00:04:49,760 Você não precisa compilá-lo. Esta é uma linguagem interpretativa. 79 00:04:49,760 --> 00:04:57,320 A frase C-shell é agora ambíguo, pois pode referir-se apenas ao original C-shell, csh, 80 00:04:57,320 --> 00:05:01,200 ou para todos os C-shells, incluindo tcsh. É um pouco ambígua. 81 00:05:01,200 --> 00:05:08,250 >> A shell mais tarde é o shell Korn, ksh, em homenagem ao programador, Korn. 82 00:05:08,250 --> 00:05:14,160 Esta concha tentou incorporar em um shell 83 00:05:14,160 --> 00:05:16,960 as vantagens do C-shell para uso interativo 84 00:05:16,960 --> 00:05:19,230 eo Bourne shell para a programação. 85 00:05:19,230 --> 00:05:25,440 Ele tem sido usado como um escudo interactivo por algumas pessoas - uma minoria. 86 00:05:25,440 --> 00:05:32,050 Mais tarde, porém, houve uma outra introdução, o shell bash, Bash, 87 00:05:32,050 --> 00:05:35,290 novamente um jogo de palavras, Bourne-again shell. 88 00:05:35,290 --> 00:05:43,830 É uma extensão do shell Bourne. Korn shell também é. Ambos são. 89 00:05:43,830 --> 00:05:48,100 Ele tem os mesmos objetivos do shell Korn de amalgamando do C-shell 90 00:05:48,100 --> 00:05:50,980 e as vantagens de Bourne shell em um shell. 91 00:05:50,980 --> 00:05:56,810 Muitas das melhorias do shell Korn também estão incluídos em Bash. 92 00:05:56,810 --> 00:06:00,710 Bash, no entanto, tem mais e é por isso preferível. 93 00:06:00,710 --> 00:06:05,180 The Bourne-again shell eo shell Korn são chamados Bourne tipo conchas 94 00:06:05,180 --> 00:06:07,730 porque incluem características do Bourne shell, 95 00:06:07,730 --> 00:06:11,180 que são incompatíveis em alguns aspectos com C-conchas. 96 00:06:11,180 --> 00:06:15,520 Há outras conchas, além daqueles, outros destinados ao uso restrito, 97 00:06:15,520 --> 00:06:20,670 talvez limitado a alguns comandos, talvez propósitos especializados, muitas vezes não é usado. 98 00:06:20,670 --> 00:06:24,240 >> Okay. Next item aqui. 99 00:06:31,300 --> 00:06:38,970 O Bash shell tornou-se associada a várias formas de Linux. 100 00:06:38,970 --> 00:06:41,550 Eu não tenho certeza se isso é verdade de todas as formas. 101 00:06:41,550 --> 00:06:43,280 Existem muitas formas lá fora e eu não usei todos eles, 102 00:06:43,280 --> 00:06:46,870 mas aqueles que eu usei, tornou-se associado a ele. 103 00:06:46,870 --> 00:06:49,670 Até onde eu sei, não há nada sobre Bash 104 00:06:49,670 --> 00:06:52,210 o que o torna mais compatível com Linux 105 00:06:52,210 --> 00:06:55,020 do que qualquer outra combinação de concha e sistema operacional. 106 00:06:55,020 --> 00:06:59,690 Eu acho que isso provavelmente reflete as inclinações dos programadores. 107 00:06:59,690 --> 00:07:07,500 Isso tornou-se associado com o Linux é mais um motivo para preferir Bash para ksh 108 00:07:07,500 --> 00:07:11,820 desde que as coisas tendem a ser escrito nele e é provável a se espalhar. 109 00:07:11,820 --> 00:07:15,410 Vou te dar outras razões para isso mais tarde. 110 00:07:15,410 --> 00:07:21,330 Scripts shell Bourne deve ser executado sob o shell Korn ou Bash. 111 00:07:21,330 --> 00:07:22,650 Se você escrever algo para o shell Bourne, 112 00:07:22,650 --> 00:07:26,180 provavelmente você pode executá-lo sob ksh ou bash. 113 00:07:26,180 --> 00:07:30,610 Scripts shell Korn provavelmente será executado sob Bash, mas não posso garantir isso. 114 00:07:30,610 --> 00:07:36,040 Mais tarde, aqui, os scripts de C-shell deve ser executado sob o TC-shell. 115 00:07:38,850 --> 00:07:41,690 O C-shell foi realmente nunca usado extensivamente para scripting 116 00:07:41,690 --> 00:07:48,110 desde o shell Bourne e depois as conchas Bourne tipo eram preferíveis para essa finalidade. 117 00:07:48,110 --> 00:07:50,620 Então, o que realmente não é tão importante assim. 118 00:07:50,620 --> 00:07:53,480 Há um monte de scripts shell Bourne que foram escritas há muito tempo, 119 00:07:53,480 --> 00:07:56,860 antes do shell Korn ou o Bourne-again shell foram introduzidas. 120 00:07:56,860 --> 00:07:59,300 Aqueles que ainda estão em uso, parte dos sistemas operacionais, 121 00:07:59,300 --> 00:08:01,590 e assim você vai encontrá-los se você olhar para o sistema operacional 122 00:08:01,590 --> 00:08:03,760 ou alguns pacotes de programação antigas. 123 00:08:03,760 --> 00:08:12,840 >> Bash é de certa forma a tornar-se uma espécie de língua franca para sistemas operacionais. 124 00:08:12,840 --> 00:08:17,580 É já foi estendido para o Windows e VMS. 125 00:08:17,580 --> 00:08:20,440 VMS, no caso de você não sabe, é um sistema operacional proprietário 126 00:08:20,440 --> 00:08:25,480 da Digital Equipment Corporation, que ainda está em uso, em grande parte, nos bastidores. 127 00:08:25,480 --> 00:08:29,250 E se ele vai estar em execução em vários sistemas operacionais diferentes, 128 00:08:29,250 --> 00:08:31,110 provavelmente as pessoas tendem a mudar para ele. 129 00:08:31,110 --> 00:08:33,840 Mas este desenvolvimento é relativamente recente. 130 00:08:33,840 --> 00:08:39,490 É apenas o começo, então eu não posso prever se isso vai passar a ser realmente esse tipo de língua franca. 131 00:08:39,490 --> 00:08:43,539 Além disso, porque caminhos de arquivo e bibliotecas diferem 132 00:08:43,539 --> 00:08:46,210 entre estes sistemas operacionais diferentes, 133 00:08:46,210 --> 00:08:50,250 você pode não ser capaz de escrever um script Bash em um sistema operacional 134 00:08:50,250 --> 00:08:51,840 e, em seguida, executá-lo em outro. 135 00:08:51,840 --> 00:08:54,440 Você deve ser capaz de movê-lo entre diferentes Unix, Linux 136 00:08:54,440 --> 00:08:59,020 Sistemas operacionais Mac OS, mas não necessariamente para o Windows ou VMS. 137 00:08:59,020 --> 00:09:01,390 Você pode ter que alterar as descrições do arquivo pathname, 138 00:09:01,390 --> 00:09:03,180 e algumas bibliotecas pode ser diferente, 139 00:09:03,180 --> 00:09:05,230 o que pode afetar a maneira que alguns comandos funcionam 140 00:09:05,230 --> 00:09:09,730 ou como eles processam argumentos e afins. 141 00:09:09,730 --> 00:09:19,230 Além disso, outra precaução aqui é que não há qualquer garantia 142 00:09:19,230 --> 00:09:23,570 que todas as diferentes conchas que eu mencionei - Bourne shell, C-shell, 143 00:09:23,570 --> 00:09:29,880 TC-shell, Korn, Bourne-again shell - estarão disponíveis em qualquer Unix 144 00:09:29,880 --> 00:09:33,750 ou Linux ou Mac OS. 145 00:09:33,750 --> 00:09:35,620 Eles simplesmente podem não estar lá. 146 00:09:35,620 --> 00:09:38,300 Essa é uma das precauções aqui. 147 00:09:38,300 --> 00:09:41,490 É uma limitação infeliz aqui desde que você gostaria que as coisas funcionem em todos os lugares, 148 00:09:41,490 --> 00:09:44,380 mas, infelizmente, você não pode contar com isso. 149 00:09:44,380 --> 00:09:47,230 >> Okay. Next one aqui. 150 00:09:50,280 --> 00:09:54,370 Vamos dizer que você quer escrever um shell script, 151 00:09:54,370 --> 00:09:57,170 um programa que consiste de comandos shell. 152 00:09:57,170 --> 00:10:01,200 Você escreve seus comandos, colocá-los em um arquivo e executar o arquivo. 153 00:10:01,200 --> 00:10:04,230 E se você quiser incluir argumentos? 154 00:10:04,230 --> 00:10:09,650 No caso de operações de fachada, os argumentos são chamados de parâmetros ou parâmetros posicionais 155 00:10:09,650 --> 00:10:15,940 e eles vão ser chamados por um sinal de dólar e numeral, $ 1, $ 2. 156 00:10:15,940 --> 00:10:27,000 Portanto, se o script tem esse nome, o meu primeiro argumento pode ser argumento 1 157 00:10:27,000 --> 00:10:30,540 e meu segundo pode ser argumento 2, 158 00:10:30,540 --> 00:10:34,110 e dentro do meu roteiro, se eu quiser se referir a essas coisas - 159 00:10:34,110 --> 00:10:36,810 vamos apagar isso desde que eu realmente não estou indo para executá-lo - 160 00:10:36,810 --> 00:10:42,160 dentro do meu script que eu possa ter um dólar para se referir a arg1, 161 00:10:42,160 --> 00:10:45,890 $ 2, que vai sair dessa forma, arg2. 162 00:10:45,890 --> 00:10:50,080 Então, esses símbolos estão disponíveis para se referir aos argumentos, 163 00:10:50,080 --> 00:10:52,390 e aqueles que se aplicam a todas as conchas. 164 00:10:52,390 --> 00:10:56,520 Além disso, existem outros caracteres. 165 00:10:56,520 --> 00:11:01,700 $ * Refere-se a toda a lista de argumentos, todos eles. 166 00:11:01,700 --> 00:11:05,390 $ # Refere-se ao número de argumentos. 167 00:11:05,390 --> 00:11:07,910 Mais uma vez, isso se aplica a todas as conchas. 168 00:11:07,910 --> 00:11:15,540 Esses símbolos, * e #, pode ser usado com esses significados em outros lugares também. 169 00:11:15,540 --> 00:11:17,940 Nós não vai ter para isso. 170 00:11:17,940 --> 00:11:20,460 >> Linha especificador Shell. O que é isso? 171 00:11:20,460 --> 00:11:27,760 Digamos que você tenha escrito um roteiro e é por uma concha especial e você quer executá-lo. 172 00:11:27,760 --> 00:11:33,500 Como você sabe o que desembolsar o seu sistema operacional vai usar para executar o script? 173 00:11:33,500 --> 00:11:37,230 Em um ponto, você poderia supor que iria executá-lo no shell Bourne 174 00:11:37,230 --> 00:11:39,440 se você não dizer o contrário, 175 00:11:39,440 --> 00:11:41,730 mas as pessoas não estão a escrever scripts no Bourne Shell que muito mais 176 00:11:41,730 --> 00:11:43,750 e você não pode mesmo contar com isso. 177 00:11:43,750 --> 00:11:48,740 Portanto, temos aqui uma linha de especificador shell aqui. 178 00:11:48,740 --> 00:11:52,450 Isso especifica Bash. 179 00:11:52,450 --> 00:11:56,750 Note-se que especifica-la no caminho, / bin / bash. 180 00:11:56,750 --> 00:12:02,870 Se um computador tem o shell bash, mas não no diretório bin, / bin, isso não vai funcionar. 181 00:12:02,870 --> 00:12:06,870 Esse é outro qualificador, outro cuidado aqui. 182 00:12:06,870 --> 00:12:09,500 O sinal de libra é o caractere de comentário de linha. 183 00:12:09,500 --> 00:12:12,300 Isso se aplica a todas as conchas. 184 00:12:12,300 --> 00:12:18,610 O caso particular aqui, #! no início de um script, é um caso especial. 185 00:12:18,610 --> 00:12:23,410 Isso especifica o shell em que para executar o script. 186 00:12:23,410 --> 00:12:30,230 Como eu estava dizendo, ele pode não ser o mesmo lugar / bin. 187 00:12:30,230 --> 00:12:34,880 Além disso, há outra coisa aqui. 188 00:12:34,880 --> 00:12:41,250 Se você usar apenas o sinal de libra, sem ponto de exclamação e caminho, 189 00:12:41,250 --> 00:12:44,640 que deve indicar um C-shell. 190 00:12:44,640 --> 00:12:48,300 No entanto, eu não recomendo fazer isso porque eu não sou capaz de garantir 191 00:12:48,300 --> 00:12:49,750 que isso vai funcionar sempre. 192 00:12:49,750 --> 00:12:52,220 Se você quiser um C-shell, seria melhor dizer assim. 193 00:12:52,220 --> 00:12:58,450 Então, há algo um pouco confuso aqui. 194 00:12:58,450 --> 00:13:03,940 Se você usar uma linha de shell especificador, como / bin / bash 195 00:13:03,940 --> 00:13:07,070 e que a casca não está disponível lá, 196 00:13:07,070 --> 00:13:10,680 não há tal coisa como / bin / bash nesse computador particular, 197 00:13:10,680 --> 00:13:14,330 ou porque ele não tem Bash ou porque está em um local diferente, 198 00:13:14,330 --> 00:13:17,450 você receberá um erro informando que o script que você correu não existe. 199 00:13:17,450 --> 00:13:21,510 E, claro, existe o script, de modo que a mensagem de erro é confuso. 200 00:13:21,510 --> 00:13:24,810 A razão pela qual o sistema operacional lhe dá esse erro 201 00:13:24,810 --> 00:13:28,370 ou, mais precisamente, que o seu shell interativo no qual você está executando o que dá esse erro, 202 00:13:28,370 --> 00:13:33,510 é que ele relata o comando utilizado, que é o nome do script. 203 00:13:33,510 --> 00:13:36,920 Esse comando efetivamente chamado de shell com o nome do script. 204 00:13:36,920 --> 00:13:39,330 É aí que você começa a mensagem de erro confuso. 205 00:13:39,330 --> 00:13:42,980 Outra maneira de chamar script shell 206 00:13:42,980 --> 00:13:45,910 é especificando o shell na linha de comando, como aqui. 207 00:13:45,910 --> 00:13:52,510 Este é um comando. Isto diz Bash executar e, em seguida, executar o meu script em Bash. 208 00:13:52,510 --> 00:13:55,680 Isso vai ter precedência sobre uma linha de especificador, 209 00:13:55,680 --> 00:14:02,090 e este tem a característica de permitir que você fornecer para caminhos diferentes. 210 00:14:02,090 --> 00:14:04,840 Se você acabou de dar um comando, o sistema operacional irá olhar para o comando 211 00:14:04,840 --> 00:14:06,410 em vários lugares. 212 00:14:06,410 --> 00:14:08,820 Se estiver disponível, ele deve encontrá-lo. 213 00:14:08,820 --> 00:14:12,290 O computador vai encontrar Bash onde ele está localizado e executá-lo, 214 00:14:12,290 --> 00:14:15,470 para que você não precisa, então, a se preocupar com onde encontra-lo. 215 00:14:15,470 --> 00:14:17,360 Há potencialmente outras preocupações aqui, 216 00:14:17,360 --> 00:14:20,830 como se há mais do que uma versão do Bash, que é possível, embora improvável. 217 00:14:20,830 --> 00:14:23,540 Então, isso é uma outra maneira de lidar com essas coisas. 218 00:14:23,540 --> 00:14:30,480 Linhas de especificador pode chamar qualquer shell. 219 00:14:30,480 --> 00:14:34,480 Eles também podem chamar outros de conchas coisas. 220 00:14:34,480 --> 00:14:37,940 Exemplos que tenho aqui são sed, que é o editor de fluxo; 221 00:14:37,940 --> 00:14:39,900 awk, que é uma linguagem de processamento padrão; 222 00:14:39,900 --> 00:14:43,680 e perl, uma linguagem de script muito altamente desenvolvida. 223 00:14:43,680 --> 00:14:47,570 Se você colocar uma linha especificador indicando um desses programas, no início, 224 00:14:47,570 --> 00:14:51,270 ele irá diretamente para o programa, em vez de iniciar uma shell. 225 00:14:51,270 --> 00:14:54,030 Esses programas têm limites para suas habilidades. 226 00:14:54,030 --> 00:14:58,790 Perl é muito capaz. Sed é um editor. Ele pode fazer coisas além de simplesmente editando. 227 00:14:58,790 --> 00:15:03,300 Mas pode ser difícil de programa que. 228 00:15:03,300 --> 00:15:09,670 Além disso, a passagem de argumentos e outras coisas para o script é impossível ou confuso. 229 00:15:09,670 --> 00:15:15,030 Então, nesses casos, com awk ou sed, é, pelo menos na minha experiência, 230 00:15:15,030 --> 00:15:18,910 preferível escrever um shell script e chamada awk ou sed do script shell 231 00:15:18,910 --> 00:15:24,660 ao invés de chamar awk ou sed como a linha de especificador de script. 232 00:15:24,660 --> 00:15:26,980 Perl é uma linguagem altamente diversificada, como eu disse. 233 00:15:26,980 --> 00:15:30,050 Você não pode executar comandos interativos em perl, 234 00:15:30,050 --> 00:15:32,660 o que significa que você não pode testar peças de scripts que você está em desenvolvimento 235 00:15:32,660 --> 00:15:33,970 , executando-os de forma interativa. 236 00:15:33,970 --> 00:15:36,160 No entanto, é uma linguagem extremamente capaz 237 00:15:36,160 --> 00:15:40,960 e tornou-se uma ferramenta muito utilizada. 238 00:15:40,960 --> 00:15:45,720 Isso é apenas um pouco mais de uma observação entre parênteses sobre as linhas de especificador. 239 00:15:45,720 --> 00:15:50,610 >> Em todas ou a maioria das formas de Linux - mais uma vez, eu não posso ter certeza de que é tudo - 240 00:15:50,610 --> 00:15:57,900 e no Mac OS, se você digitar csh você começa tcsh, 241 00:15:57,900 --> 00:16:00,570 e se você digitar sh você começa bash. 242 00:16:00,570 --> 00:16:05,020 Eles estavam tentando lá para dar-lhe as versões mais avançadas desses conchas, 243 00:16:05,020 --> 00:16:07,940 mas isso pode ser confuso. 244 00:16:07,940 --> 00:16:16,720 Se você escrever um script usando tcsh ou Bash apresenta ao chamar csh ou sh 245 00:16:16,720 --> 00:16:22,230 e tente executá-lo em um computador que não tem tcsh ou Bash, 246 00:16:22,230 --> 00:16:25,050 você pode obter alguns erros se existem comandos lá 247 00:16:25,050 --> 00:16:27,970 que essas conchas não reconhece. 248 00:16:27,970 --> 00:16:34,120 Além disso, você pode ter chamado a sua concha em seu computador local 249 00:16:34,120 --> 00:16:37,700 chamando-o como sh ou csh e em seguida, obter as conchas mais avançados. 250 00:16:37,700 --> 00:16:41,440 Você pode até não pensar no fato de que você está usando o shell mais avançado. 251 00:16:41,440 --> 00:16:45,670 Portanto, esta é uma armadilha potencial. 252 00:16:45,670 --> 00:16:50,290 Como é estabelecido que se você digitar sh você começa Bash, 253 00:16:50,290 --> 00:16:55,580 se você digitar csh você começa tsch? 254 00:16:55,580 --> 00:16:59,940 Há coisas nestes computadores chamados ligações 255 00:16:59,940 --> 00:17:06,460 que pode conectar-se a nomes de arquivos para se referir à mesma coisa. 256 00:17:06,460 --> 00:17:12,180 Ele quer pode ser de 2 nomes para o mesmo arquivo ou um arquivo cuja finalidade é para se referir a outro arquivo. 257 00:17:12,180 --> 00:17:17,550 Eles são chamados de links físicos e simbólicos. Não vamos estar indo para mais isso hoje. 258 00:17:17,550 --> 00:17:21,619 Também pode haver arquivos separados - um arquivo sh, 1 arquivo Bash - 259 00:17:21,619 --> 00:17:23,880 mas ambos executar Bash. 260 00:17:23,880 --> 00:17:29,350 Depois, há um outro qualificador aqui. 261 00:17:29,350 --> 00:17:42,640 Se você está ligando para um destes shells por um nome, 262 00:17:42,640 --> 00:17:46,640 você pode pensar que você deseja obter a mesma funcionalidade que chamá-la por outro nome. 263 00:17:46,640 --> 00:17:49,700 Bem, isso realmente não é necessariamente verdade. 264 00:17:49,700 --> 00:17:55,020 Estes comandos podem examinar o nome pelo qual eles foram chamados 265 00:17:55,020 --> 00:18:00,020 e eles podem, com base em que o nome, se comportam de forma diferente. 266 00:18:00,020 --> 00:18:02,740 Pode haver problemas de tentar obedecer a um padrão. 267 00:18:02,740 --> 00:18:06,060 Alguns de vocês podem ter ouvido falar do padrão POSIX ou de outra, 268 00:18:06,060 --> 00:18:08,730 talvez outros recursos. 269 00:18:08,730 --> 00:18:14,520 Isto pode ser seleccionado, por vezes, através de argumentos de linha de comando 270 00:18:14,520 --> 00:18:17,310 ou definindo variáveis ​​shell. 271 00:18:17,310 --> 00:18:22,170 Chamando-o como sh ou bash pode realmente levar a uma execução diferente 272 00:18:22,170 --> 00:18:25,300 mesmo que seja o mesmo arquivo que você está executando. 273 00:18:25,300 --> 00:18:31,800 Outra coisa a considerar é que, mesmo se outro computador tem tcsh ou Bash, 274 00:18:31,800 --> 00:18:35,310 se eles não estão ligados como estão em seu computador local 275 00:18:35,310 --> 00:18:37,990 se você tiver um computador local Linux ou Mac OS, 276 00:18:37,990 --> 00:18:45,630 em seguida, novamente você vai ter o shell que você chama sh ou csh, não aquele que você pode preferir. 277 00:18:50,430 --> 00:19:01,130 A corrente de Bourne shell tem melhorias menor do que aqueles em Bash 278 00:19:01,130 --> 00:19:06,100 mas passado os do shell Bourne originais. 279 00:19:06,100 --> 00:19:09,690 Como resultado disso, até mesmo o shell atual Bourne, sh, 280 00:19:09,690 --> 00:19:14,560 mesmo quando não é Bash, assemelha-se à linguagem C mais do que o C-shell faz. 281 00:19:14,560 --> 00:19:20,460 Isso não era verdade quando o C-shell foi criada pela primeira vez, mas desenvolveu-se dessa forma. 282 00:19:20,460 --> 00:19:26,560 Você pode notar aqui que todos esses nomes de fachada, exceto para o shell Bourne 283 00:19:26,560 --> 00:19:30,640 tem algo para indicar qual shell que são - csh, o bash - 284 00:19:30,640 --> 00:19:32,550 mas o shell Bourne é apenas sh. 285 00:19:32,550 --> 00:19:34,910 Por quê? Esse foi o shell de origem. 286 00:19:34,910 --> 00:19:37,770 Foi o Shell de então, não uma concha, 287 00:19:37,770 --> 00:19:41,090 e uma vez que era a casca, não havia nenhuma razão para distingui-lo de outro shell. 288 00:19:41,090 --> 00:19:45,030 Então é por isso que tem esse nome e ainda o faz. 289 00:19:50,630 --> 00:19:58,990 >> Este top aqui é uma linha de um banco de dados de senha de uma conta que eu tenho lá 290 00:19:58,990 --> 00:20:01,680 em outro computador. 291 00:20:01,680 --> 00:20:08,300 Vou tentar obter esse nome para que você possa ver que parte no final, o shell. 292 00:20:09,720 --> 00:20:15,450 O banco de dados de senha detém as características de login para todos os usuários. 293 00:20:15,450 --> 00:20:20,330 No início é o nome de usuário, que você pode ver os últimos 2 cartas de meu agora. 294 00:20:20,330 --> 00:20:23,970 Os campos aqui são separados por dois pontos. 295 00:20:23,970 --> 00:20:28,210 O último campo, como você pode ver, é bin / tcsh, o shell. 296 00:20:28,210 --> 00:20:30,230 Esse é o especificador de shell. 297 00:20:30,230 --> 00:20:33,240 Há algo interessante aqui. 298 00:20:33,240 --> 00:20:36,950 Quando Unix foi desenvolvido em primeiro lugar, havia apenas um shell, 299 00:20:36,950 --> 00:20:38,350 então não havia escolha lá. 300 00:20:38,350 --> 00:20:45,570 Então, por que eles permitem que um campo no banco de dados de senha para especificar um shell? 301 00:20:45,570 --> 00:20:47,920 Eu não sei, mas é bom que eles fizeram. 302 00:20:47,920 --> 00:20:52,030 É um pouco difícil de fazer mudanças no formato de banco de dados de senha 303 00:20:52,030 --> 00:20:54,420 porque muitos programas referem-se a seu formato 304 00:20:54,420 --> 00:20:57,720 e teria que ser reescrito. 305 00:20:57,720 --> 00:21:04,130 É um desenvolvimento feliz ou fortuito que eles incluíram nesse campo. 306 00:21:04,130 --> 00:21:12,780 Esse tipo de uma linha do arquivo de senha é usado em todos os computadores Unix e Linux, tanto quanto eu sei. 307 00:21:12,780 --> 00:21:14,650 O Mac tem o seu próprio sistema. 308 00:21:14,650 --> 00:21:17,810 Ele realmente tem um arquivo de senhas com as linhas em que formato, 309 00:21:17,810 --> 00:21:21,060 mas isso não é o lugar onde as características do usuário são definidos. 310 00:21:21,060 --> 00:21:24,200 Outra observação entre parênteses lá. 311 00:21:36,470 --> 00:21:46,020 >> Se você está chamando uma concha, você pode chamá-lo como um sub-shell de suas conchas existentes. 312 00:21:46,020 --> 00:21:50,480 Então, se eu ir aqui, vamos nos livrar dessas coisas. 313 00:21:50,480 --> 00:21:53,350 Aqui estou eu no C-shell. 314 00:21:56,830 --> 00:22:01,200 Essa variável, que identifica com precisão o meu escudo, 315 00:22:01,200 --> 00:22:04,300 na verdade, nem sempre é uma maneira confiável de determinar o que desembolsar você está executando, 316 00:22:04,300 --> 00:22:06,220 mas neste caso é. 317 00:22:06,220 --> 00:22:08,040 E se eu simplesmente digitar - 318 00:22:09,970 --> 00:22:12,470 Agora estou em Bash. 319 00:22:12,470 --> 00:22:19,540 Algumas coisas vão ser os mesmos. ls diz-me os meus mandamentos. 320 00:22:19,540 --> 00:22:24,500 Se eu a suspender voltar para o meu C-shell, sl, mesmo. Certo? 321 00:22:24,500 --> 00:22:28,890 fg, primeiro plano, voltar para o meu shell Bash. 322 00:22:28,890 --> 00:22:38,290 pwd, diretório atual, de volta para o C-shell. 323 00:22:38,290 --> 00:22:43,180 pwd, diretório diferente - na verdade não é um diretório diferente neste caso. 324 00:22:43,180 --> 00:22:45,110 É o mesmo diretório. 325 00:22:45,110 --> 00:22:50,000 Vamos dizer que eu quero chamar um comando aqui: onde ls. 326 00:22:50,000 --> 00:22:52,140 O que isso faz? 327 00:22:52,140 --> 00:22:53,670 Diz-me onde o comando ls, 328 00:22:53,670 --> 00:22:56,670 o que me dá uma listagem de diretório, está localizado na ls. 329 00:22:56,670 --> 00:23:01,460 Vamos voltar para Bash shell. Vamos tentar a mesma coisa. 330 00:23:01,460 --> 00:23:05,830 Hmm, interessante lá, onde: comando não encontrado. 331 00:23:05,830 --> 00:23:07,400 Por que isso? 332 00:23:07,400 --> 00:23:11,570 O comando onde está construído para o C-shell. 333 00:23:11,570 --> 00:23:15,630 Este não é um comando que tem que ser lido para a memória de outro lugar e executado. 334 00:23:15,630 --> 00:23:20,310 O C-shell executa-lo, transferindo a execução de parte de seu próprio código 335 00:23:20,310 --> 00:23:22,790 e não é no shell Bash. 336 00:23:22,790 --> 00:23:25,710 Então, Bash, não tendo tal comando integrado, procura por ele, não encontrá-lo, 337 00:23:25,710 --> 00:23:27,720 e teremos um erro. 338 00:23:27,720 --> 00:23:32,290 Portanto, temos um shell bash em execução em uma C-shell, e chamamos isso de um sub-shell. 339 00:23:32,290 --> 00:23:38,480 E no caso de você estiver curioso, Bash shell tem sua própria maneira de localizar os comandos. 340 00:23:38,480 --> 00:23:42,590 hash refere-se ao facto de que pode ser executada mais rapidamente, 341 00:23:42,590 --> 00:23:44,960 sendo encontrados mais rapidamente. 342 00:23:44,960 --> 00:23:48,610 Essa é uma das melhorias construídas em algumas dessas conchas. 343 00:23:50,220 --> 00:23:54,200 >> Bourne tipo conchas são os preferidos para a programação. 344 00:23:54,200 --> 00:23:57,300 Eles têm estruturas de controle como loops, instruções condicionais, 345 00:23:57,300 --> 00:24:00,240 o tipo de comandos que você pode usar em linguagens de programação como C 346 00:24:00,240 --> 00:24:04,190 ou qualquer outra língua. Talvez você esteja programando em Java ou qualquer outra coisa. 347 00:24:04,190 --> 00:24:06,460 Shells ter os demais. 348 00:24:06,460 --> 00:24:11,790 As conchas do tipo Bourne, particularmente Bash, têm mais 349 00:24:11,790 --> 00:24:15,730 e eles são projetados com maior flexibilidade. 350 00:24:15,730 --> 00:24:20,700 O Bash shell tem arrays. The Bourne shell original não faz. 351 00:24:20,700 --> 00:24:26,130 Assim que pode ser consideravelmente vantajoso para a programação. 352 00:24:26,130 --> 00:24:29,810 O C-shell realmente tem matrizes, mas não tem um monte desses outros recursos. 353 00:24:29,810 --> 00:24:33,450 As conchas do tipo Bourne irá executar mais rápido 354 00:24:33,450 --> 00:24:36,520 se eles não têm os elementos que se destinam a utilização interactiva. 355 00:24:36,520 --> 00:24:39,340 Você carrega as coisas com um propósito, o que carrega-los para outra finalidade. 356 00:24:39,340 --> 00:24:41,520 Há que trade-off lá. 357 00:24:41,520 --> 00:24:44,510 Esses recursos que são destinados para uso interativo 358 00:24:44,510 --> 00:24:46,920 realmente são de pouco ou nenhum uso de scripts. 359 00:24:46,920 --> 00:24:52,160 É possível usar um sub-shell interativo assim como o que eu comecei lá 360 00:24:52,160 --> 00:24:57,780 para testar os comandos que você pretende usar em um script. 361 00:24:57,780 --> 00:25:01,180 Isso é o que você não pode fazer com perl. Você pode fazer isso com as conchas. 362 00:25:01,180 --> 00:25:04,850 Mesmo as estruturas como loops e assim por diante pode ser executado de forma interativa. 363 00:25:04,850 --> 00:25:07,000 Eles são ocasionalmente útil para executar de forma interativa, 364 00:25:07,000 --> 00:25:10,180 mas é mais provável que você está usando para desenvolver um script. 365 00:25:15,690 --> 00:25:17,400 >> Aliases. 366 00:25:17,400 --> 00:25:21,630 Este vai ser sobre o C-shell. 367 00:25:23,270 --> 00:25:27,570 Mecanismo de História, onde você voltar aos comandos anteriores 368 00:25:27,570 --> 00:25:30,340 ou partes deles que você já tenha executado. 369 00:25:30,340 --> 00:25:33,680 Mais uma vez, sobre o C-shell, o shell Bourne e shell Korn tem essas coisas, 370 00:25:33,680 --> 00:25:35,620 mas eu não vou entrar na deles. 371 00:25:35,620 --> 00:25:40,340 Então, aqui estão alguns aliases úteis que eu tenho. 372 00:25:43,100 --> 00:25:44,880 Em vez de digitar ls - é um comando comum - 373 00:25:44,880 --> 00:25:47,620 basta digitar l e salve-se um personagem. 374 00:25:47,620 --> 00:25:50,600 ls com várias opções, todos os trabalhos. 375 00:25:50,600 --> 00:25:54,460 Note-se que essas definições têm aspas em torno deles. 376 00:25:54,460 --> 00:25:57,520 Nestes casos, as citações não são necessárias. 377 00:25:57,520 --> 00:26:00,100 Se você pode definir os aliases sem as aspas, ele continuaria a trabalhar. 378 00:26:00,100 --> 00:26:02,910 Eles são recomendados. 379 00:26:02,910 --> 00:26:04,900 Há situações em que você não pode usar a citação 380 00:26:04,900 --> 00:26:08,050 porque você quer que algo aconteça, que a citação impediria. 381 00:26:08,050 --> 00:26:11,210 Às vezes, você pode citar parte da definição, mas não tudo isso. 382 00:26:11,210 --> 00:26:17,010 Também é geralmente recomendado o uso de aspas simples ao invés de aspas duplas. 383 00:26:17,010 --> 00:26:19,750 Aspas ter efeitos sobre as definições das variáveis, 384 00:26:19,750 --> 00:26:22,950 particularmente levando-os a ser avaliada ao invés de impedir isso. 385 00:26:22,950 --> 00:26:25,910 Por que iríamos querer parar a avaliação? 386 00:26:25,910 --> 00:26:28,710 E como citações fazer isso por nós? 387 00:26:28,710 --> 00:26:32,600 >> Aqui está um comando que você pode achar interessante. 388 00:26:32,600 --> 00:26:35,470 'Ls g *' 389 00:26:35,470 --> 00:26:37,640 g *, como você provavelmente sabe, é uma expressão curinga 390 00:26:37,640 --> 00:26:40,290 para todos os nomes de arquivos que começam com g. 391 00:26:40,290 --> 00:26:46,410 Se eu escrever em um comando ls g *, eu vou pegar uma lista de todos os nomes no meu diretório atual. 392 00:26:46,410 --> 00:26:50,870 Se eu definir esse alias como é aqui com as citações, 393 00:26:50,870 --> 00:26:56,990 ele irá executar esse comando no diretório atual onde você está executando-o. 394 00:26:56,990 --> 00:27:01,250 Mas se você executar a definição de alias sem as aspas, 395 00:27:01,250 --> 00:27:09,620 ele irá avaliar o curinga g * quando ele é executado este comando de definição. 396 00:27:09,620 --> 00:27:14,400 Assim, a definição do alias será ls seguido pela lista de arquivos no diretório 397 00:27:14,400 --> 00:27:16,310 em que o comando alias é executado, 398 00:27:16,310 --> 00:27:19,180 independentemente de onde você realmente pretende executar o comando. 399 00:27:19,180 --> 00:27:26,360 Este não é de grande utilidade, e as aspas prevenir a avaliação do asterisco. 400 00:27:26,360 --> 00:27:30,780 Então você acabou de obter a definição de ser ls g *. 401 00:27:30,780 --> 00:27:35,510 Então, quando você executar o alias, lgs, então ele coloca isso. 402 00:27:35,510 --> 00:27:40,490 Agora não há citações, e ele irá avaliar o asterisco, quando você executar o comando alias. 403 00:27:40,490 --> 00:27:43,900 Então, isso é uma coisa. 404 00:27:43,900 --> 00:27:46,590 Aspas teria esse mesmo efeito aqui, 405 00:27:46,590 --> 00:27:50,580 mas há outros casos em que as aspas duplas não funcionam tão bem. 406 00:27:50,580 --> 00:27:52,450 >> Aqui é outra. 407 00:27:52,450 --> 00:27:54,270 Você pode saber o comando grep. 408 00:27:54,270 --> 00:28:02,110 O comando grep pode ser usado para digitalizar um arquivo para as linhas que têm determinadas seqüências. 409 00:28:02,110 --> 00:28:10,350 Então, vamos passar por cima aqui e eu vou sair da minha concha Bourne. 410 00:28:23,570 --> 00:28:25,450 Okay. Aqui está um arquivo. 411 00:28:25,450 --> 00:28:31,490 Vamos dizer que é cordas abc grep. Aqui está. 412 00:28:31,490 --> 00:28:37,930 Se eu fizer zddd grep, recebo nada. Okay. 413 00:28:37,930 --> 00:28:40,960 Então, ele encontra uma corda, ele relata, que não encontra, não relatá-lo. 414 00:28:40,960 --> 00:28:44,930 Ele produz qualquer linha que tem essa corda nele. 415 00:28:44,930 --> 00:28:49,080 Há todos os tipos de opções aqui que você pode encontrar na documentação. 416 00:28:49,080 --> 00:28:52,160 Aqui está uma maneira de fazê-lo. 417 00:28:52,160 --> 00:29:03,290 E este aqui, aliás grabc 'grep abc'? 418 00:29:03,290 --> 00:29:09,000 Isso vai incluir um argumento quando o alias é definido. 419 00:29:09,000 --> 00:29:26,300 Então, se eu fazer isso aqui, agora se eu fizer grabc, 420 00:29:26,300 --> 00:29:30,620 agora o alias inclui mais do que o simples comando. Ele também tem o argumento. 421 00:29:30,620 --> 00:29:32,190 Até o momento que funciona. 422 00:29:32,190 --> 00:29:38,590 Eu tenho um outro comando aqui, um presente, então esses são diferentes cordas em lá 423 00:29:38,590 --> 00:29:46,790 e mostrar que isso não encontrar nada lá, uma vez que não corresponde. 424 00:29:46,790 --> 00:29:56,180 >> E se eu quiser incluir na definição de alias do arquivo que eu vou procurar 425 00:29:56,180 --> 00:30:02,970 e eu quero dar como um argumento para o alias a corda que eu estou procurando? 426 00:30:02,970 --> 00:30:08,040 Eu poderia querer dizer abc como o argumento para o meu apelido, 427 00:30:08,040 --> 00:30:10,870 mas o alias já determinado arquivo. 428 00:30:10,870 --> 00:30:15,710 E é aí que esta expressão vem dentro 429 00:30:20,430 --> 00:30:25,270 Observe aqui temos grep como antes. 430 00:30:25,270 --> 00:30:28,130 Temos o arquivo aqui, strings. 431 00:30:28,130 --> 00:30:35,610 \ ^!, Tipo de uma expressão estranha, acho que, se você ainda não viu isso antes. 432 00:30:35,610 --> 00:30:39,920 Ponto de exclamação faz parte do mecanismo de história C-shell. 433 00:30:39,920 --> 00:30:45,220 Ele pode chamar comandos anteriores, pode recordar argumentos para os comandos e assim por diante. 434 00:30:46,760 --> 00:31:01,570 O mecanismo de histórico é utilizada como parte de serrilhado. 435 00:31:01,570 --> 00:31:07,390 Se você especificar uma linha após o ponto de exclamação, ele irá se referir a essa linha na lista do histórico, 436 00:31:07,390 --> 00:31:11,910 que não será metendo agora, já que é um assunto completamente diferente. 437 00:31:11,910 --> 00:31:16,280 É possível especificar parte de uma linha. 438 00:31:16,280 --> 00:31:22,950 Então! 03:02 seria o segundo argumento do número de comando 3. 439 00:31:22,950 --> 00:31:30,430 O acento circunflexo aqui nesta expressão representa o primeiro argumento. 440 00:31:30,430 --> 00:31:34,410 Se você não dar-lhe uma indicação de qual comando você está se referindo, 441 00:31:34,410 --> 00:31:37,300 refere-se ao comando imediatamente anterior, 442 00:31:37,300 --> 00:31:41,990 eo acento circunflexo é um símbolo para o primeiro argumento. 443 00:31:41,990 --> 00:31:46,820 Porque é o acento circunflexo e não o número, você não precisa usar o cólon, 444 00:31:46,820 --> 00:31:52,660 assim! ^ significa que o primeiro argumento para o comando anterior. 445 00:31:52,660 --> 00:31:55,020 Um pouco confuso aqui. 446 00:31:55,020 --> 00:31:58,450 Neste caso, quando você usa isso como uma definição de alias, 447 00:31:58,450 --> 00:32:04,650 a referência história remete para os comandos em que o alias é usado. 448 00:32:04,650 --> 00:32:08,470 Então, isso vai voltar um comando como uma operação de história, 449 00:32:08,470 --> 00:32:11,810 mas como uma operação apelido refere-se ao comando em que você digita, 450 00:32:11,810 --> 00:32:14,780 dizer, grstrings_file. 451 00:32:17,440 --> 00:32:20,240 Temos as aspas aqui dentro. Qual é a barra invertida para? 452 00:32:20,240 --> 00:32:30,810 Neste caso, como em outros lugares, nós não queremos para executar o mecanismo de histórico 453 00:32:30,810 --> 00:32:33,680 enquanto a definição do alias. 454 00:32:33,680 --> 00:32:37,900 Se não tivéssemos a barra invertida lá, o shell puxaria no primeiro argumento 455 00:32:37,900 --> 00:32:41,870 do comando direita antes que correu este comando apelido, o que nós não queremos. 456 00:32:41,870 --> 00:32:47,520 Queremos que este seja construído para o comando alias para chamar um argumento mais tarde. 457 00:32:47,520 --> 00:32:53,550 As aspas simples não escapar um ponto de exclamação, a referência história. 458 00:32:53,550 --> 00:32:57,450 Talvez você conheça a expressão fuga significa mudar o sentido da coisa. 459 00:32:57,450 --> 00:33:00,260 Neste caso, isso significa alguma coisa para parar de ter um significado especial. 460 00:33:00,260 --> 00:33:03,030 Significado especial do ponto de exclamação é história. 461 00:33:03,030 --> 00:33:05,790 Fuja e não tem esse significado. 462 00:33:05,790 --> 00:33:08,080 Citações não faça isso; barra invertida faz. 463 00:33:08,080 --> 00:33:11,900 Então, nós estamos realmente usando dois níveis de escapar aqui. 464 00:33:23,500 --> 00:33:29,620 Vou passar esse comando para a outra janela sem digitá-lo 465 00:33:29,620 --> 00:33:35,210 usando essas operações de edição, que você pode achar útil. 466 00:33:40,620 --> 00:33:42,460 Outra coisa aqui que eu vou te mostrar. 467 00:33:42,460 --> 00:33:46,730 Se você acabou de digitar apelido sem argumentos, diz-lhe todos os seus argumentos. 468 00:33:46,730 --> 00:33:48,640 Isso é um monte de apelidos eu já tinha aqui 469 00:33:48,640 --> 00:33:53,400 além daqueles que eu tenho usado aqui hoje. 470 00:33:53,400 --> 00:34:00,220 Mas se eu simplesmente digitar o nome de um alias, ele me diz o que significa. 471 00:34:00,220 --> 00:34:03,390 Note-se que as citações sumiram ea barra invertida se foi. 472 00:34:03,390 --> 00:34:08,620 Esta cadeia aqui é o resultado dessa definição de alias, 473 00:34:08,620 --> 00:34:12,199 e agora tem apenas! ^ nele. 474 00:34:12,199 --> 00:34:19,150 Isso vai olhar nas cordas de arquivo para qualquer coisa. 475 00:34:19,150 --> 00:34:34,900 Então, se eu fizer cordas grstrings_file, eu não dar-lhe qualquer coisa para olhar para lá, 476 00:34:34,900 --> 00:34:37,429 mas ele está olhando em cordas. 477 00:34:37,429 --> 00:34:42,330 Ele não encontrou a palavra cordas nas cordas de arquivo, mas não encontrar abc. 478 00:34:42,330 --> 00:34:46,770 E não acho que. 479 00:34:46,770 --> 00:34:52,330 Então, aqui estamos dando um argumento que bate na definição do alias, 480 00:34:52,330 --> 00:34:55,530 que está inserida nela. 481 00:34:55,530 --> 00:34:58,540 É onde esta expressão vem. 482 00:34:58,540 --> 00:35:00,240 Você pode usar mais do que 1. 483 00:35:00,240 --> 00:35:03,170 O acento circunflexo é um símbolo para o primeiro argumento. 484 00:35:03,170 --> 00:35:07,510 Se você quiser usar um segundo argumento, você, então, dizer: 2. 485 00:35:07,510 --> 00:35:11,250 Não há nenhum símbolo especial para o segundo argumento. 486 00:35:11,250 --> 00:35:14,790 E porque você está usando um numeral, você teria que usar o cólon. 487 00:35:14,790 --> 00:35:17,220 Não é, no entanto, uma outra escolha aqui. 488 00:35:17,220 --> 00:35:21,220 O sinal de dólar representa o último argumento. 489 00:35:21,220 --> 00:35:23,320 E porque este é um símbolo, você pode omitir o cólon. 490 00:35:23,320 --> 00:35:25,870 Portanto, seria o último argumento na lista. 491 00:35:25,870 --> 00:35:27,900 E há também aquele. 492 00:35:27,900 --> 00:35:31,380 Asterisk significa que todos, por isso esta é a lista de argumentos completa, 493 00:35:31,380 --> 00:35:35,150 e, novamente, você pode omitir o cólon, porque não é um numeral. 494 00:35:36,970 --> 00:35:39,950 Espero que esteja tudo observando tudo isso. 495 00:35:39,950 --> 00:35:54,100 >> O mecanismo história pode voltar para as linhas anteriores na lista de histórico. 496 00:35:54,100 --> 00:36:01,370 Você pode fazer isso em uma definição de alias. 497 00:36:01,370 --> 00:36:02,950 Eu nunca vi este feito. 498 00:36:02,950 --> 00:36:05,840 Ele teria o efeito de puxar os comandos anteriores da lista do histórico 499 00:36:05,840 --> 00:36:08,130 quando você executa o alias, o que poderia ser diferentes comandos 500 00:36:08,130 --> 00:36:11,240 dependendo de quando e onde você executá-lo. 501 00:36:11,240 --> 00:36:14,020 É concebível que você pode querer sair dessa referência 502 00:36:14,020 --> 00:36:15,900 só para saber o que um comando anterior era. 503 00:36:15,900 --> 00:36:17,280 Eu nunca vi isso acontecer. 504 00:36:17,280 --> 00:36:19,970 Suponho que alguém pode querer, mas isso é muito improvável. 505 00:36:19,970 --> 00:36:26,480 Há uma outra coisa aqui. 506 00:36:26,480 --> 00:36:33,060 Se você usar essa referência do tipo da história, 507 00:36:33,060 --> 00:36:38,190 em seguida, são usados ​​apenas os argumentos para os quais existe uma tal referência. 508 00:36:38,190 --> 00:36:42,180 Se você tem uma definição de alias que não usar uma referência do tipo da história, 509 00:36:42,180 --> 00:36:44,060 se ele só se torna o início do comando 510 00:36:44,060 --> 00:36:46,520 e você tem outros argumentos, então qualquer coisa que você escreva depois que 511 00:36:46,520 --> 00:36:48,450 vai ser adicionado ao comando. 512 00:36:48,450 --> 00:36:52,040 Neste caso, o exemplo que eu só dei lá, foi utilizado o primeiro argumento; 513 00:36:52,040 --> 00:36:54,610 nós não usamos qualquer outro. 514 00:36:54,610 --> 00:36:57,960 Se outros argumentos tinha sido dado na linha de comando, eles não seriam utilizados. 515 00:36:57,960 --> 00:37:04,630 Então, se você usar a referência história em tudo, então você deve usá-lo para obter qualquer argumento. 516 00:37:04,630 --> 00:37:11,310 >> Há uma outra coisa aqui eu só quero mencionar, em parte, entre parênteses, 517 00:37:11,310 --> 00:37:15,250 ou seja, que este mecanismo de história, com o ponto de exclamação 518 00:37:15,250 --> 00:37:18,010 vai voltar para o C-shell de origem. 519 00:37:18,010 --> 00:37:27,060 O tcsh introduziu operações de história 520 00:37:27,060 --> 00:37:30,910 que utilizam os tipos de comandos e cordas dos editores, 521 00:37:30,910 --> 00:37:33,650 ou Emacs ou vi. 522 00:37:33,650 --> 00:37:36,430 Minha opinião pessoal é Emacs é muito mais fácil de usar para essa finalidade 523 00:37:36,430 --> 00:37:39,390 mesmo se você usar o vi para a edição regular. 524 00:37:39,390 --> 00:37:43,900 Existem vários comandos do Emacs, que agora estão adaptados para a história. 525 00:37:43,900 --> 00:37:46,410 Controle P recebe a linha anterior na lista do histórico. 526 00:37:46,410 --> 00:37:48,840 Outra Controle P vai chegar o antes disso. 527 00:37:48,840 --> 00:37:50,540 A seta para cima faz a mesma coisa. 528 00:37:50,540 --> 00:37:54,190 Controle N obtém o próximo comando que você já tenha rolado para trás alguns aspectos. 529 00:37:54,190 --> 00:37:55,880 Seta para baixo faz isso também. 530 00:37:55,880 --> 00:38:00,480 Você pode mover para a esquerda para a direita com as setas e várias outras coisas. 531 00:38:00,480 --> 00:38:02,390 Isso pode fazer uso do mecanismo de história 532 00:38:02,390 --> 00:38:05,070 muito mais fácil do que usar a sintaxe ponto de exclamação, 533 00:38:05,070 --> 00:38:07,930 mas você não iria usar isso em uma definição de alias. 534 00:38:17,780 --> 00:38:20,020 Nós vamos passar por cima de que uma outra hora. 535 00:38:24,300 --> 00:38:25,810 >> Variáveis. 536 00:38:26,880 --> 00:38:29,510 Você sabe o que são variáveis ​​em linguagens de programação. 537 00:38:29,510 --> 00:38:31,680 As conchas de tê-los também. 538 00:38:31,680 --> 00:38:37,350 O C-shell usa o comando set para atribuir variáveis, 539 00:38:37,350 --> 00:38:41,360 de modo que define a variável de um o valor de b - 540 00:38:41,360 --> 00:38:46,390 como eu disse, uma definição inútil, mas uma ilustração de como este é utilizado. 541 00:38:48,790 --> 00:38:52,410 O comando set irá criar uma variável se ela ainda não existir. 542 00:38:55,270 --> 00:39:02,490 Os parâmetros posicionais para shell scripts podem ser considerados variáveis, 543 00:39:02,490 --> 00:39:10,750 mas o uso deles e as regras para eles são um pouco diferentes. 544 00:39:10,750 --> 00:39:14,320 Você não pode atribuir um valor para US $ 1 no curso de um script. 545 00:39:14,320 --> 00:39:18,340 Você teria que definir uma nova variável para o efeito, se alguns de vocês queriam. 546 00:39:23,000 --> 00:39:28,470 Digite set sem argumentos e você terá uma lista de todas as variáveis ​​atualmente definidas. 547 00:39:28,470 --> 00:39:34,220 E vamos para o meu outro shell aqui e ver o que teremos se fazer isso. 548 00:39:34,220 --> 00:39:37,110 Uma lista bastante longa lá, certo? 549 00:39:37,110 --> 00:39:40,990 Vá para cima um pouco. Olhe para tudo isso. 550 00:39:40,990 --> 00:39:44,330 Algumas destas coisas são definidas automaticamente pela shell. 551 00:39:44,330 --> 00:39:49,320 O shell cria a variável e dá-lhe um valor. 552 00:39:49,320 --> 00:39:52,730 Alguns deles são definidos pela casca, mas, em seguida, redefinida pelo utilizador 553 00:39:52,730 --> 00:39:54,820 de acordo com suas preferências. 554 00:39:54,820 --> 00:39:59,110 E alguns deles são criados pelo usuário de acordo com o que está fazendo naquele dia. 555 00:39:59,110 --> 00:40:01,880 Isso é apenas um conjunto sem argumentos. 556 00:40:06,920 --> 00:40:10,050 Há uma característica ímpar aqui dessa coisa. 557 00:40:10,050 --> 00:40:17,980 Não tem que ser tanto sem espaços entre sinal de igual eo nome da variável 558 00:40:17,980 --> 00:40:23,700 eo valor ou espaços em ambos os lados do sinal de igual, 559 00:40:23,700 --> 00:40:28,940 como neste. 560 00:40:35,620 --> 00:40:41,340 Isso não vai funcionar, e isso realmente é um comando válido 561 00:40:41,340 --> 00:40:43,390 mas não vai fazer o que você pretende. 562 00:40:43,390 --> 00:40:50,070 Esse comando irá funcionar, porque se você acabou de dizer e definir um nome de variável 563 00:40:50,070 --> 00:40:54,890 sem sinal de igual ou conjunto e um nome de variável com um sinal de igual e nenhum valor, 564 00:40:54,890 --> 00:40:57,770 ele vai definir a variável para um valor nulo. 565 00:40:57,770 --> 00:41:00,120 Portanto, definir a = é um comando válido. 566 00:41:00,120 --> 00:41:04,370 O comando set pode definir mais de uma variável na mesma linha. 567 00:41:04,370 --> 00:41:11,240 Portanto, este comando aqui tem o efeito de definir tanto a e b para valores nulos. 568 00:41:11,240 --> 00:41:13,470 Provavelmente não é o que você quer. 569 00:41:13,470 --> 00:41:17,940 Este aqui, mencionado anteriormente, levará a um erro 570 00:41:17,940 --> 00:41:21,270 porque = b não é uma expressão válida. 571 00:41:21,270 --> 00:41:23,680 Um nome de variável não pode começar com o sinal de igual para igual. 572 00:41:26,760 --> 00:41:29,080 E há estas outras coisas aqui. 573 00:41:29,080 --> 00:41:36,820 Os dois pontos foram usados ​​para selecionar os argumentos de linhas de história, 574 00:41:36,820 --> 00:41:41,210 e eles podem ser usados ​​- e eu não queria entrar em diante - para modificar as coisas. 575 00:41:41,210 --> 00:41:44,480 Eles também podem ser usados ​​para modificar as variáveis ​​do escudo. 576 00:41:44,480 --> 00:41:49,050 Este aqui, $ a, tem um valor. 577 00:41:49,050 --> 00:41:55,040 : R vai decolar uma extensão. 578 00:41:55,040 --> 00:41:57,200 Uma extensão será nada depois de um ponto, 579 00:41:57,200 --> 00:41:59,200 um ponto e qualquer coisa que se lhe segue, no final de um arquivo, 580 00:41:59,200 --> 00:42:03,230 apenas no final da lista após a última barra. 581 00:42:03,230 --> 00:42:05,480 Então, eu tenho aqui. 582 00:42:05,480 --> 00:42:10,730 uma é que. Ele vai cair o. O. 583 00:42:10,730 --> 00:42:16,510 Se não há nenhuma extensão, apenas os caminhos após a última barra, ele não terá nenhum efeito. 584 00:42:16,510 --> 00:42:27,480 a: h, essa expressão variável, vai decolar o último elemento de uma lista de diretórios, 585 00:42:27,480 --> 00:42:29,660 novamente, somente após a última barra. 586 00:42:29,660 --> 00:42:33,160 Então, / a / b / c torna-se / a / b, 587 00:42:33,160 --> 00:42:38,870 mas este é alterado porque o elemento após a lista é nulo. 588 00:42:38,870 --> 00:42:43,070 Aqui há algo que também eu quero enfatizar. 589 00:42:43,070 --> 00:42:46,770 Estes qualificadores não procurar a existência desses arquivos. 590 00:42:46,770 --> 00:42:48,910 Olham apenas para strings. 591 00:42:48,910 --> 00:42:54,520 Estes destinam-se a manipular nomes de arquivos, nomes de caminho, 592 00:42:54,520 --> 00:42:57,520 mas eles podem ser usados ​​em qualquer seqüência, mesmo se não é um nome de arquivo. 593 00:42:57,520 --> 00:42:58,920 E eles não olham para a existência, 594 00:42:58,920 --> 00:43:03,550 por isso, se não há tal arquivo, / a / b / c, isso ainda funciona. 595 00:43:03,550 --> 00:43:06,930 Se é de alguma utilidade é outra questão, mas ainda funciona. 596 00:43:06,930 --> 00:43:12,850 As variáveis ​​são diferentes no Bourne. Nós vamos chegar a isso mais tarde. 597 00:43:12,850 --> 00:43:18,240 Sinal de dólar pode ser escapado assim como o ponto de exclamação e um asterisco. 598 00:43:18,240 --> 00:43:21,760 Sinal de dólar pode ser precedidos por uma barra invertida ou as aspas simples. 599 00:43:21,760 --> 00:43:24,790 Aspas duplas têm o efeito estranho em todas as conchas 600 00:43:24,790 --> 00:43:28,690 de forçar a avaliação de um sinal de dólar expressão variável. 601 00:43:28,690 --> 00:43:31,960 Então, se ele está sendo escapou de uma maneira, as aspas duplas pode ter o efeito 602 00:43:31,960 --> 00:43:34,380 de fazer com que ser avaliada de qualquer maneira. 603 00:43:34,380 --> 00:43:37,090 Isso é um pouco confuso. 604 00:43:37,090 --> 00:43:43,740 Se houver vários níveis de fuga, tais como aspas simples dentro de aspas duplas 605 00:43:43,740 --> 00:43:46,770 ou aspas duplas dentro de aspas simples, você deve testar para ver o que vai acontecer 606 00:43:46,770 --> 00:43:49,520 a uma variável, se você estiver usando um. 607 00:43:49,520 --> 00:43:53,410 Essas duas situações - o dobro dentro de interior único, single da dupla - 608 00:43:53,410 --> 00:43:55,980 não necessariamente dar-lhe o mesmo resultado. 609 00:44:02,520 --> 00:44:05,600 As variáveis ​​de ambiente, variáveis ​​C-shell ligados. 610 00:44:05,600 --> 00:44:08,340 As variáveis ​​de ambiente também são variáveis ​​no C-shell, 611 00:44:08,340 --> 00:44:11,250 e eles também são variáveis ​​em outros shells também. 612 00:44:11,250 --> 00:44:15,230 No C-shell, eles são conjuntos distintos. 613 00:44:15,230 --> 00:44:18,130 As coisas que eu estava dizendo antes são sobre variáveis ​​shell. 614 00:44:18,130 --> 00:44:21,300 As variáveis ​​de ambiente são um conjunto distinto de variáveis 615 00:44:21,300 --> 00:44:28,650 com a exceção de uma série de variáveis ​​que chamamos de variáveis ​​ligadas, 616 00:44:28,650 --> 00:44:30,640 que são muito importantes e nós vamos entrar em quem mais tarde. 617 00:44:30,640 --> 00:44:34,950 As variáveis ​​de ambiente são passadas automaticamente 618 00:44:34,950 --> 00:44:41,800 de conchas ou comandos que são executados a partir de sua concha. 619 00:44:41,800 --> 00:44:46,220 As outras coisas que não são. As variáveis ​​shell, os apelidos não são. As variáveis ​​de ambiente são. 620 00:44:46,220 --> 00:44:48,630 É por isso que nós os chamamos de variáveis ​​de ambiente, 621 00:44:48,630 --> 00:44:55,030 a idéia é que o ambiente ultrapassa apenas o seu shell atual. 622 00:44:55,030 --> 00:45:00,510 Eles podem ser utilizados para definir as coisas para comandos. 623 00:45:00,510 --> 00:45:05,470 Aqui é um exemplo. IMPRESSORA, LPDEST. 624 00:45:05,470 --> 00:45:12,270 Ambas as variáveis ​​podem definir uma impressora que um comando vai usar para imprimir as coisas. 625 00:45:12,270 --> 00:45:16,500 Se você tiver várias impressoras ao redor, você pode querer colocar o que você gosta. 626 00:45:16,500 --> 00:45:21,320 A razão pela qual temos 2 variáveis ​​é que diferentes conjuntos de comandos foram escritos 627 00:45:21,320 --> 00:45:23,870 usando estas diferentes variáveis. 628 00:45:23,870 --> 00:45:25,910 Você pode dar-lhes valores diferentes. 629 00:45:25,910 --> 00:45:28,860 O mais provável é que você vai dar a ambos o mesmo valor. 630 00:45:28,860 --> 00:45:35,840 Essas coisas funcionam porque os comandos que fazem a impressão 631 00:45:35,840 --> 00:45:40,740 foram programados para examinar os valores dessas variáveis. 632 00:45:42,200 --> 00:45:46,150 Se um programa não foram escritas dessa forma, se fosse escrito para fazer outra coisa, 633 00:45:46,150 --> 00:45:48,280 a variável seria irrelevante. 634 00:45:48,280 --> 00:45:52,530 Assim, o sistema operacional não está olhando para estas variáveis 635 00:45:52,530 --> 00:45:55,210 cada vez que você se referir a uma impressora. 636 00:45:55,210 --> 00:45:59,090 Um comando que faz impressão é olhar para estas variáveis ​​se ele é programado dessa forma. 637 00:46:11,030 --> 00:46:15,240 Essas variáveis ​​são frequentemente definidos em seus arquivos de inicialização 638 00:46:15,240 --> 00:46:19,440 mas não necessariamente. 639 00:46:19,440 --> 00:46:21,050 Você pode defini-los na linha de comando. 640 00:46:21,050 --> 00:46:24,090 Eles podem ser definidos num comando. 641 00:46:24,090 --> 00:46:28,740 Um comando que executa algo pode ter a sua própria seleção de variáveis ​​- 642 00:46:28,740 --> 00:46:32,390 variáveis ​​que são exclusivas de um pacote de software específico, por exemplo. 643 00:46:32,390 --> 00:46:36,740 Eles vão ser definidos quando você executar esse pacote. 644 00:46:39,690 --> 00:46:42,680 Como essas variáveis ​​passados ​​para um sub-shell? 645 00:46:42,680 --> 00:46:48,210 Quando um sub-shell é escrito, ele não escreve para essa área. 646 00:46:48,210 --> 00:46:53,260 A área da sub-shell que se dedica a variáveis ​​de ambiente 647 00:46:53,260 --> 00:46:56,450 não é escrito pelo sub-shell, que é escrito por cópia. 648 00:46:56,450 --> 00:47:00,530 Quando você executa um comando comum, tais como os comandos para imprimir ou o que seja, 649 00:47:00,530 --> 00:47:03,840 eles começam com a criação de um novo shell. 650 00:47:03,840 --> 00:47:06,190 O shell cria um shell e, em seguida, substitui parte dela 651 00:47:06,190 --> 00:47:08,800 com o comando que você está executando, o que é um pouco confuso, 652 00:47:08,800 --> 00:47:10,740 mas é assim que estes comandos obter as variáveis ​​de ambiente 653 00:47:10,740 --> 00:47:14,890 que, em seguida, referir-se a mais tarde. 654 00:47:21,920 --> 00:47:28,010 O comando aqui para definir o setenv variável. 655 00:47:28,010 --> 00:47:36,470 É assim que você definir. É 3 elementos: setenv, variável, valor. 656 00:47:36,470 --> 00:47:44,710 Se você simplesmente setenv sem argumentos, o que você ganha? 657 00:47:47,220 --> 00:47:48,810 Uma lista de todas as variáveis. 658 00:47:48,810 --> 00:47:53,190 Novamente, é uma lista longa e agradável e, neste caso, como nos outros, 659 00:47:53,190 --> 00:47:57,320 essas variáveis ​​são definidas em grande parte por minha operação de login pelo próprio shell 660 00:47:57,320 --> 00:47:59,740 e não por qualquer coisa que eu fiz. 661 00:47:59,740 --> 00:48:03,580 Há um outro comando aqui, printenv. 662 00:48:07,520 --> 00:48:10,340 Isso também imprime o meio ambiente. 663 00:48:10,340 --> 00:48:15,240 Observe esta última coisa aqui, EDITOR = vi. 664 00:48:15,240 --> 00:48:21,120 Isso diz que, se eu estou usando algo que chama um editor 665 00:48:21,120 --> 00:48:25,530 e eu não especificar um editor e ele me permite a escolha, pode me dar vi. 666 00:48:25,530 --> 00:48:37,280 E se eu fizer EDITOR printenv? Diz-me o que é. 667 00:48:37,280 --> 00:48:41,340 Bem antes disso, houve uma variável, MENOS. 668 00:48:41,340 --> 00:48:46,040 Estas são as suas opções defaults quando eu executo o comando LESS, 669 00:48:46,040 --> 00:48:49,360 que exibe os arquivos. 670 00:48:49,360 --> 00:48:55,910 Então, se eu fizer isso, printenv pode demorar de 1 ou 0 argumento argumentos, 671 00:48:55,910 --> 00:48:58,070 não mais do que 1. 672 00:49:01,800 --> 00:49:05,690 Há outros comandos também, mas não vamos entrar em tudo o que hoje. 673 00:49:05,690 --> 00:49:11,010 Lembre-se que foram os modificadores para as variáveis ​​de shell como: h, 674 00:49:11,010 --> 00:49:14,350 que vai cair o último elemento de um caminho, 675 00:49:14,350 --> 00:49:17,950 ou: r, que vai cair uma extensão. 676 00:49:17,950 --> 00:49:23,110 Os que agora se aplicam às variáveis ​​de ambiente também. Eles não usaram. 677 00:49:23,110 --> 00:49:24,960 Ela costumava ser que não poderia ser modificado. Agora eles podem ser. 678 00:49:24,960 --> 00:49:29,190 É um dos avanços com a evolução das conchas ao longo dos anos. 679 00:49:29,190 --> 00:49:35,620 Eu estava dizendo que as conchas, como parte dos ambientes 680 00:49:35,620 --> 00:49:43,040 e variáveis ​​shell no C-shell são, com algumas exceções, conjuntos distintos. 681 00:49:43,040 --> 00:49:46,790 Você pode estabelecer uma variável de ambiente e uma variável de shell com o mesmo nome. 682 00:49:46,790 --> 00:49:49,220 Eles serão variáveis ​​diferentes, eles podem ter valores diferentes. 683 00:49:49,220 --> 00:49:53,090 Alterar o valor de um não vai alterar o valor do outro. 684 00:49:53,090 --> 00:49:58,070 Estas variáveis ​​são todos avaliados com o cifrão - $ a, $ o que quer. 685 00:49:58,070 --> 00:50:02,340 Assim que se você tem isso? Você sabe qual deles você consegue? 686 00:50:02,340 --> 00:50:04,520 Em meus testes eu tenho a variável shell, 687 00:50:04,520 --> 00:50:07,240 mas isto não é documentado e você não pode contar com isso. 688 00:50:07,240 --> 00:50:10,270 Então eu lhe pergunto, é a criação de variáveis ​​shell e meio ambiente 689 00:50:10,270 --> 00:50:13,490 com os mesmos nomes uma boa ideia? Não. Tudo bem. 690 00:50:13,490 --> 00:50:17,460 O que são essas as principais exceções em que as variáveis ​​do ambiente e shell 691 00:50:17,460 --> 00:50:19,860 estão ligados um ao outro? 692 00:50:19,860 --> 00:50:27,470 Existem estes 4. 693 00:50:32,030 --> 00:50:35,510 Carta Capital variável de ambiente TERM, 694 00:50:35,510 --> 00:50:41,540 desembolsar variável termo em letras pequenas, o tipo de emulação de terminal. 695 00:50:41,540 --> 00:50:47,430 Eu só vou passar por cima aqui e eu vou fazer eco, um comando útil aqui, 696 00:50:47,430 --> 00:50:52,560 $ $ TERM prazo. E lá. 697 00:50:52,560 --> 00:51:00,570 xterm é um tipo de terminal para janelas exibidas no Sistema X Window. 698 00:51:00,570 --> 00:51:04,330 xterm-cor é uma variação do que a que permite que as cores diferentes. 699 00:51:04,330 --> 00:51:06,580 Por que é que vamos definir isso? O que é isso bom? 700 00:51:06,580 --> 00:51:09,740 Comandos que reorganizar a tela como o editor 701 00:51:09,740 --> 00:51:13,680 enviar sequências particulares, chamados de seqüências de escape, 702 00:51:13,680 --> 00:51:18,160 a um terminal ou uma janela para reorganizar-lo e assim por diante. 703 00:51:18,160 --> 00:51:20,990 Essas sequências são diferentes para diferentes tipos de terminais. 704 00:51:20,990 --> 00:51:23,100 Isto diz-lhe quais usar. 705 00:51:23,100 --> 00:51:25,900 Às vezes, há problemas lá. 706 00:51:25,900 --> 00:51:28,600 Você pode querer mudar isso. 707 00:51:28,600 --> 00:51:30,780 Se as coisas não estão funcionando, por vezes, o tipo de terminal está configurado errado, 708 00:51:30,780 --> 00:51:36,440 você pode ser capaz de corrigi-lo, redefinindo a variável prazo. 709 00:51:36,440 --> 00:51:43,420 Nestes casos, a alteração de uma variável, a variável de ambiente ou a variável de shell, 710 00:51:43,420 --> 00:51:45,970 deve alterar o outro. 711 00:51:45,970 --> 00:51:50,970 Eu descobri através da experiência que a mudança de prazo em letras maiúsculas 712 00:51:50,970 --> 00:51:54,060 nem sempre mudar shell variável termo em letras pequenas. 713 00:51:54,060 --> 00:51:55,550 Este é um bug. 714 00:51:55,550 --> 00:51:59,400 Eu não sei se isso é sempre verdade. Na maioria das vezes isso não é verdade, mas pode ser. 715 00:51:59,400 --> 00:52:02,490 Então, se você fizer uma alteração, basta verificar isso. 716 00:52:02,490 --> 00:52:05,830 Não é sempre que você precisar alterar esse valor, mas de vez em quando você faz. 717 00:52:05,830 --> 00:52:08,260 USUÁRIO variável de ambiente. 718 00:52:08,260 --> 00:52:12,070 Mais uma vez, variável de ambiente em letras maiúsculas, a Shell variável em letras pequenas. 719 00:52:12,070 --> 00:52:13,710 Este é o seu nome de usuário. 720 00:52:13,710 --> 00:52:16,730 É só em circunstâncias muito excepcionais 721 00:52:16,730 --> 00:52:18,420 que você gostaria de mudar isso. 722 00:52:18,420 --> 00:52:22,350 Se o seu nome de usuário é outra pessoa, ele pode lançar todos os tipos de coisas. 723 00:52:22,350 --> 00:52:26,040 Diretório home, o diretório home do usuário. 724 00:52:26,040 --> 00:52:28,060 Novamente, você não gostaria de mudar isso. 725 00:52:28,060 --> 00:52:32,260 Repare em todos esses casos e esse que nós estamos prestes a cobrir, a variável de caminho, 726 00:52:32,260 --> 00:52:37,070 variável de ambiente é em letras maiúsculas ea variável shell ligado é em letras pequenas. 727 00:52:37,070 --> 00:52:39,240 Se você alterar um, você deve mudar o outro. 728 00:52:39,240 --> 00:52:45,960 Este tipo de ligação não pode ser estabelecida como você não pode ligar duas variáveis, 729 00:52:45,960 --> 00:52:50,570 Para além destas quatro, ea ligação destas variáveis ​​não pode ser desfeita, 730 00:52:50,570 --> 00:52:52,090 você não pode separá-los. 731 00:52:52,090 --> 00:52:55,820 Então, esses quatro pares de variáveis ​​são vinculadas. 732 00:52:55,820 --> 00:52:59,020 Eles sempre serão. Nenhum outro será. 733 00:52:59,020 --> 00:53:05,720 Além disso, seria possível a criação de variáveis ​​com os mesmos nomes 734 00:53:05,720 --> 00:53:07,780 dos tipos opostos. 735 00:53:07,780 --> 00:53:11,600 Você poderia fazer um termo variável shell em letras pequenas 736 00:53:11,600 --> 00:53:14,990 ou uma variável de ambiente TERM em letras maiúsculas. 737 00:53:14,990 --> 00:53:19,040 Essas variáveis ​​seria independente destas variáveis ​​binárias 738 00:53:19,040 --> 00:53:20,780 e seriam independentes uma da outra. 739 00:53:20,780 --> 00:53:23,780 Eu não posso imaginar por que você faria isso a menos que queira confundir as pessoas. 740 00:53:24,600 --> 00:53:29,730 Este aqui, variável de caminho, este é um muito importante. 741 00:53:29,730 --> 00:53:35,550 Outra coisa é que não pode haver casos 742 00:53:35,550 --> 00:53:40,430 de variáveis ​​com nomes emparelhados similares que não estão ligados uns aos outros. 743 00:53:40,430 --> 00:53:45,000 Não pode haver variáveis, Shell e Shell, em letras maiúsculas e minúsculas. 744 00:53:45,000 --> 00:53:48,300 Com base nesse nome, você não sabe se essa variável é uma variável shell 745 00:53:48,300 --> 00:53:51,580 ou uma variável de ambiente, e eles não estão ligados um ao outro. 746 00:53:51,580 --> 00:53:55,300 Então, esse tipo de pares de nomes não implica variáveis ​​ligadas. 747 00:53:55,300 --> 00:53:58,830 A variável de caminho, que eu estava mostrando antes, 748 00:53:58,830 --> 00:54:01,880 é uma lista de nomes de caminho no qual o shell procura por comandos. 749 00:54:01,880 --> 00:54:12,320 Vamos acabar com a esta janela aqui e vamos fazer echo $ PATH, letras maiúsculas - 750 00:54:12,320 --> 00:54:20,230 variável de ambiente - echo $ caminho, letras pequenas - Shell variável. 751 00:54:20,230 --> 00:54:24,980 Observe que a lista de diretórios é a mesma. Estes estão vinculados. 752 00:54:24,980 --> 00:54:26,590 Mude um, você mudar o outro. 753 00:54:26,590 --> 00:54:32,970 Na variável de ambiente os elementos são separados por dois pontos. Observe que. 754 00:54:32,970 --> 00:54:35,130 As variáveis ​​shell são separados por espaços. 755 00:54:35,130 --> 00:54:38,760 Esta variável de ambiente é uma única seqüência. 756 00:54:38,760 --> 00:54:41,480 A variável de shell é uma matriz. 757 00:54:41,480 --> 00:54:43,490 The Bourne shell não tem arrays. 758 00:54:43,490 --> 00:54:46,600 Bash faz, mas isso já é uma parte fixa da shell. 759 00:54:46,600 --> 00:54:48,660 Esta é uma seqüência única e não um array. 760 00:54:48,660 --> 00:54:50,420 O C-shell sempre teve matrizes. 761 00:54:50,420 --> 00:54:52,630 As matrizes são muito mais fáceis de se trabalhar. 762 00:54:52,630 --> 00:54:54,400 Você pode se referir a partes dele. 763 00:54:54,400 --> 00:55:02,350 $ Caminho Então echo [1] e eu recebo / usr / bin, o primeiro elemento. 764 00:55:02,350 --> 00:55:09,950 Mais uma vez, lembre-se sinal de dólar representa o último elemento da lista de histórico. 765 00:55:09,950 --> 00:55:16,850 O que acontece lá? Ele tentou encontrar cifrão como um símbolo variável. 766 00:55:16,850 --> 00:55:20,850 Eu escapar. Opa. Não levaria o que quer. 767 00:55:20,850 --> 00:55:23,690 Algumas destas coisas não funcionam tão bem. 768 00:55:23,690 --> 00:55:28,140 Talvez nós vamos deixar isso para fora. 769 00:55:28,140 --> 00:55:36,980 Asterisk refere-se a coisa toda, mas é o que você ganha se você não especificar um elemento. 770 00:55:36,980 --> 00:55:46,170 Outra maneira que as variáveis ​​de matriz podem ser manipuladas, 771 00:55:46,170 --> 00:55:49,500 número de elementos de lá, 7 elementos. 772 00:55:49,500 --> 00:55:53,410 Aqui nós colocamos o sinal de libra antes do nome da variável. 773 00:55:53,410 --> 00:55:58,280 Aqui está mais um. Coloque um ponto de interrogação lá. 774 00:55:58,280 --> 00:56:03,170 Isso é um valor lógico. Isso indica que a variável existe. 775 00:56:03,170 --> 00:56:05,160 É uma outra maneira de trabalhar com variáveis. 776 00:56:05,160 --> 00:56:06,660 Isso, por sinal, não tem que ser uma variável de matriz. 777 00:56:06,660 --> 00:56:08,210 Isso poderia ser qualquer variável. 778 00:56:08,210 --> 00:56:11,840 E se eu fizer isso, não há tal variável e eu recebo um 0. 779 00:56:11,840 --> 00:56:14,990 Outra pequena coisa lá sobre as avaliações de variáveis. 780 00:56:23,670 --> 00:56:32,950 Voltar a este aqui, se por algum motivo você queria trabalhar com esta 781 00:56:32,950 --> 00:56:37,990 ao invés de trabalhar com a matriz, a variável de shell, 782 00:56:37,990 --> 00:56:41,470 existem comandos que podem separar estas coisas baseado no cólon. 783 00:56:41,470 --> 00:56:44,080 Na verdade, se você está indo para estar fazendo isso no shell Bash, possivelmente, 784 00:56:44,080 --> 00:56:47,110 algum tipo de script, que seria, provavelmente, como você faria. 785 00:56:47,110 --> 00:56:50,350 Mas no C-shell é muito mais fácil de usar a matriz. 786 00:56:50,350 --> 00:56:58,250 No shell Bourne, as variáveis ​​são atribuídos por uma única expressão como esta, 787 00:56:58,250 --> 00:57:01,760 como a maneira que você pode atribuir uma variável em uma linguagem de programação, 788 00:57:01,760 --> 00:57:05,110 e aqui não deve haver espaços. 789 00:57:05,110 --> 00:57:09,110 É necessário que seja apenas uma string. 790 00:57:09,110 --> 00:57:14,980 Nos shells Bourne do tipo, todas as variáveis ​​são variáveis ​​shell. 791 00:57:14,980 --> 00:57:19,250 As variáveis ​​de ambiente são um subconjunto das variáveis ​​shell. 792 00:57:19,250 --> 00:57:24,060 Distinguem-se das variáveis ​​não-ambiente através da exportação. 793 00:57:24,060 --> 00:57:28,860 O comando para fazer isso é a exportação, como IMPRESSORA exportação. 794 00:57:28,860 --> 00:57:34,930 Se tivéssemos que definir tal variável, 795 00:57:34,930 --> 00:57:38,480 se queria um comando de impressão para encontrá-lo, ele teria que ser uma variável de ambiente, 796 00:57:38,480 --> 00:57:40,730 e é assim que nós torná-lo um. 797 00:57:40,730 --> 00:57:42,090 Aqui há algo meio confuso. 798 00:57:42,090 --> 00:57:50,430 Esta expressão, a exportação para o meio ambiente, deriva deste conceito shell Bourne, 799 00:57:50,430 --> 00:57:54,520 e ainda que a expressão é usada em descrições do C-shell, 800 00:57:54,520 --> 00:57:57,920 onde não existe tal comando como de exportação. 801 00:57:57,920 --> 00:58:06,200 Se você acabou de dizer exportação por si só, você tem uma lista de exportação - 802 00:58:06,200 --> 00:58:10,620 Então, se eu simplesmente exportar aqui, não há tal coisa. 803 00:58:13,620 --> 00:58:15,200 Ok, lá vamos nós. 804 00:58:15,200 --> 00:58:17,010 Essas coisas, aliás, também são definidos pela shell. 805 00:58:17,010 --> 00:58:19,400 Eu não definir qualquer um desses por mim mesmo. 806 00:58:19,400 --> 00:58:23,550 A concha faz todos os tipos de coisas por si só. 807 00:58:23,550 --> 00:58:26,650 Ele deve fazer as coisas automaticamente. 808 00:58:30,240 --> 00:58:36,880 No Bash ou Korn, você pode executar um comando como este, 809 00:58:36,880 --> 00:58:42,000 que ambos dão uma variável um valor e exportá-lo em um comando. 810 00:58:42,000 --> 00:58:46,150 No shell Bourne eles têm que ser comandos separados como uma exportação. 811 00:58:46,150 --> 00:58:48,410 Aqui é um outro aspecto que é confuso. 812 00:58:48,410 --> 00:58:52,220 O comando set no C-shell define as variáveis 813 00:58:52,220 --> 00:58:55,550 e sem argumentos lhe diz que os valores das variáveis ​​são. 814 00:58:55,550 --> 00:59:01,140 No shell bash, o comando set sem argumentos faz a mesma coisa, 815 00:59:01,140 --> 00:59:03,580 mas com argumentos que ele faz algo completamente diferente. 816 00:59:03,580 --> 00:59:06,200 Então, esses são os vários argumentos aqui. 817 00:59:06,200 --> 00:59:10,460 Alguns destes são variáveis ​​de ambiente, alguns deles são variáveis ​​shell. 818 00:59:10,460 --> 00:59:13,200 Todos eles são variáveis ​​shell realmente. Alguns desses são variáveis ​​de ambiente. 819 00:59:15,690 --> 00:59:23,920 O comando set com argumentos podem ser usados ​​para operar 820 00:59:23,920 --> 00:59:28,220 sobre os parâmetros posicionais para um script, 821 00:59:28,220 --> 00:59:33,910 que é uma maneira de fazê-los todos de uma vez. 822 00:59:33,910 --> 00:59:36,150 Nós realmente não podemos entrar nesse hoje. 823 00:59:36,150 --> 00:59:39,580 Ele também pode ser usado para alterar o comportamento do reservatório. 824 00:59:39,580 --> 00:59:46,700 Particularmente em Bash existem variáveis ​​que irão determinar a forma como o shell se comporta. 825 00:59:46,700 --> 00:59:51,310 Em seguida, também apenas este comando que você pode ver, este comando. 826 00:59:51,310 --> 00:59:59,050 Typeset seguido de variáveis ​​e tipos de variáveis ​​é usado nos shells Korn e Bash. 827 00:59:59,050 --> 01:00:04,970 Não é obrigatório, mas pode ser usado para restringir os valores de variáveis, 828 01:00:04,970 --> 01:00:08,400 que pode ser útil para evitar erros, e é bastante comum. 829 01:00:08,400 --> 01:00:11,640 Então, eu só estou mencionando que no caso de você vê-lo em algum lugar. 830 01:00:17,290 --> 01:00:19,160 O comando onde. 831 01:00:19,160 --> 01:00:22,490 Lembra que eu mencionei anteriormente o comando onde no C-shell, 832 01:00:22,490 --> 01:00:28,750 que pode dizer a localização de um caminho de comando. 833 01:00:28,750 --> 01:00:32,580 Aqui está a substituição de comando. 834 01:00:32,580 --> 01:00:41,900 Você deve encontrar no seu teclado em algum lugar um personagem que se parece com isso. 835 01:00:41,900 --> 01:00:44,910 A localização no teclado vai variar. 836 01:00:44,910 --> 01:00:47,050 Nós chamamos isso crase. É aproximadamente o tamanho de uma citação. 837 01:00:47,050 --> 01:00:48,720 Ele vai da esquerda superior para a direita inferior. 838 01:00:48,720 --> 01:00:52,690 Aqui no meu teclado Mac é no canto superior esquerdo. 839 01:00:52,690 --> 01:00:58,150 Este carácter pode ser usado para executar um comando dentro de um comando. 840 01:00:58,150 --> 01:01:03,400 Se você tiver uma expressão dentro de crase, 841 01:01:03,400 --> 01:01:07,080 essa expressão é um comando, é executado. 842 01:01:07,080 --> 01:01:09,010 A saída do comando 843 01:01:09,010 --> 01:01:11,980 é, então, substituído por toda a expressão backquote 844 01:01:11,980 --> 01:01:16,110 dentro de um comando mais longo que executa com que a produção 845 01:01:16,110 --> 01:01:22,010 como parte de sua série de argumentos e assim por diante. 846 01:01:22,010 --> 01:01:28,640 Aqui está um comando que usa isso. 847 01:01:28,640 --> 01:01:32,340 Vamos demonstrar a operação aqui. 848 01:01:44,980 --> 01:01:49,090 Vamos aqui, tirar os crase. 849 01:01:49,090 --> 01:01:54,410 Controlo A me chega ao início da linha com a sintaxe de edição Emacs. 850 01:01:54,410 --> 01:02:00,380 Até agora, o caminhos é o que faz, 851 01:02:00,380 --> 01:02:05,040 mas quando eu faço isso como este, em seguida, liga nessa lista de nomes de caminhos 852 01:02:05,040 --> 01:02:08,750 no lugar da expressão backquote todo e corre ls-l sobre eles. 853 01:02:08,750 --> 01:02:11,120 Kind of conveniente, não é? 854 01:02:11,120 --> 01:02:14,860 Então, isso é uma coisa legal. É assim que funciona crase. 855 01:02:14,860 --> 01:02:17,560 Agora vamos descer um pouco mais. 856 01:02:17,560 --> 01:02:22,050 Estes são aliases. Na verdade, eu usá-los. 857 01:02:22,050 --> 01:02:26,410 Vou tentar conseguir isso em com uma operação de edição. 858 01:02:34,900 --> 01:02:36,900 Okay. 859 01:02:36,900 --> 01:02:39,630 Agora vamos ver como essas definições saiu. 860 01:02:39,630 --> 01:02:44,930 apelido LWH me dizendo como ele é definido. 861 01:02:44,930 --> 01:02:51,210 Repare que é apenas isso, mas as cotações externas foram retiradas 862 01:02:51,210 --> 01:02:53,750 eo ponto de exclamação é retirado. 863 01:02:53,750 --> 01:02:58,940 *, A lista completa de todos os argumentos. 864 01:02:58,940 --> 01:03:03,580 Em uma definição de alias ele será aplicado de volta para onde eu uso isso. 865 01:03:03,580 --> 01:03:10,620 LWH ksh bash. Okay. 866 01:03:10,620 --> 01:03:13,960 Veja como isso funciona? Isso me poupa algum digitação. 867 01:03:13,960 --> 01:03:16,440 Vamos subir um pouco apenas para mencionar outra coisa aqui. 868 01:03:19,150 --> 01:03:23,120 Observe aqui essas diferentes conchas. Eu deveria ter mencionado isso antes. 869 01:03:23,120 --> 01:03:36,060 A CSH tem um 2 aqui e assim que faz / bin / tcsh. 870 01:03:36,060 --> 01:03:39,870 Poderíamos estabelecer por outros meios que aqueles são realmente o mesmo arquivo. 871 01:03:39,870 --> 01:03:43,150 Lembre-se que eu estava a dizer, se você digitar sh você começa bash. 872 01:03:43,150 --> 01:03:47,390 Digite isso e você conseguir isso. 873 01:03:47,390 --> 01:03:51,730 Mas aqueles que não estão ligados. Aqueles que os solteiros lá. 874 01:03:51,730 --> 01:03:54,910 E isso não é o tipo de arquivo que pode chamar outra. 875 01:03:54,910 --> 01:03:59,460 Portanto, estas são arquivos separados, sendo que os C-shell são o mesmo arquivo. 876 01:03:59,460 --> 01:04:03,640 Voltar aqui em baixo, o outro aqui, este alias, 877 01:04:03,640 --> 01:04:09,090 note que está sendo executado este comando, arquivo. 878 01:04:09,090 --> 01:04:13,810 Esse apelido que corre. Arquivo informa o tipo de um arquivo. 879 01:04:13,810 --> 01:04:20,330 Festa ksh Então FWH. Okay. 880 01:04:20,330 --> 01:04:23,230 Essa é a saída do comando file. 881 01:04:23,230 --> 01:04:24,630 Eu não sei se você sabe o que isso significa aqui, 882 01:04:24,630 --> 01:04:26,750 Mach-O binário universal com 2 arquiteturas. 883 01:04:26,750 --> 01:04:30,470 Há dois possíveis tipos de processador no Mac, 884 01:04:30,470 --> 01:04:34,780 e alguns programas foram escritos para ser capaz de executar com ambos, 885 01:04:34,780 --> 01:04:37,950 eo comando arquivo pode determinar que, de modo que é o que este significa. 886 01:04:37,950 --> 01:04:40,660 Ambos os arquivos foram escritos dessa forma. 887 01:04:40,660 --> 01:04:43,760 Assim, vemos como o alias funciona, ver como a crase funciona, 888 01:04:43,760 --> 01:04:48,640 vemos como os ls arquivo reais ou arquivo funciona. 889 01:04:52,050 --> 01:04:57,000 Isso pode não funcionar. Tente ", onde onde" e "LWH onde". Ok, vamos tentar isso. 890 01:04:57,000 --> 01:05:01,040 onde para onde. 891 01:05:01,040 --> 01:05:03,500 onde é um shell built-in. 892 01:05:03,500 --> 01:05:06,970 Lembre-se antes mostramos que Bash não tinha onde. 893 01:05:06,970 --> 01:05:10,080 Se você digitar onde no shell bash, você recebe uma mensagem de erro. 894 01:05:10,080 --> 01:05:12,540 É apenas uma parte da casca ao invés de ser um comando separado. 895 01:05:12,540 --> 01:05:20,000 O que acontece se eu digitar LWH procurando onde? Veja o que acontece lá. 896 01:05:20,000 --> 01:05:22,850 Ran onde onde, tenho essa saída e, em seguida, tentou correr ls 897 01:05:22,850 --> 01:05:25,600 como l de onde é um shell built-in. 898 01:05:25,600 --> 01:05:28,790 onde está lá, mas os outros não existem. 899 01:05:28,790 --> 01:05:32,090 Nenhum deles existe, na verdade. 900 01:05:32,090 --> 01:05:35,560 De modo que nem sempre funciona, e também ilustra como algumas coisas 901 01:05:35,560 --> 01:05:39,580 não fizer exatamente o que você poderia ter pensado. 902 01:05:40,930 --> 01:05:43,010 Vamos descer um pouco mais aqui. 903 01:05:44,890 --> 01:05:54,760 Isso aqui é em Bash. Essa é também a substituição de comando como a crase. 904 01:05:54,760 --> 01:06:05,280 Mas ao contrário de crase, ele usa este estilo variável. 905 01:06:05,280 --> 01:06:09,860 Há uma série de expressões que começam com um cifrão, 906 01:06:09,860 --> 01:06:16,070 e quando estes não são variáveis, eles emprestado o uso do sinal de dólar 907 01:06:16,070 --> 01:06:19,570 para indicar a expressão de algum tipo. 908 01:06:19,570 --> 01:06:23,550 Isso pode estar entre parênteses ou colchetes ou parênteses duplos, 909 01:06:23,550 --> 01:06:26,320 que tem uma finalidade diferente. 910 01:06:26,320 --> 01:06:29,500 Solteiro parênteses aqui são uma substituição de comando, assim como os crase. 911 01:06:29,500 --> 01:06:32,720 Parênteses Casal é realmente uma operação aritmética. 912 01:06:32,720 --> 01:06:35,380 Há outras sintaxes, outras operações. 913 01:06:35,380 --> 01:06:41,520 Sintaxe crase está disponível em Bash. 914 01:06:41,520 --> 01:06:46,780 No entanto, esta é preferível. É muito mais fácil de ler e permite o assentamento. 915 01:06:46,780 --> 01:06:51,300 Você pode ter dentro de $ (comando) outro comando, 916 01:06:51,300 --> 01:06:54,590 algo como - 917 01:07:14,560 --> 01:07:18,210 Recebo uma lista lá. 918 01:07:18,210 --> 01:07:21,670 Isso funcionaria se eu tivesse a crase também. 919 01:07:32,050 --> 01:07:38,470 E se eu quiser fazer algo parecido - 920 01:08:03,390 --> 01:08:06,430 Você provavelmente não iria realmente usar este comando, 921 01:08:06,430 --> 01:08:14,160 mas esta substituição comando interno ecoa os nomes de todos os arquivos começando com um, 922 01:08:14,160 --> 01:08:18,229 então este é executado ls-l nesses arquivos, 923 01:08:18,229 --> 01:08:20,500 e, em seguida, este apenas ecoa a saída. 924 01:08:21,729 --> 01:08:24,479 Você provavelmente não iria fazer isso, você tinha acabado de fazer o eco ou ls, 925 01:08:24,479 --> 01:08:29,450 mas isso mostra como a nidificação de comandos funciona. 926 01:08:29,450 --> 01:08:34,380 Então, só uma outra característica aqui. 927 01:08:34,380 --> 01:08:37,450  Eu mencionei isso antes, que quando você tem onde no C-shell, 928 01:08:37,450 --> 01:08:42,770 digite obras nas conchas Bourne do tipo para localizar comandos. 929 01:08:48,939 --> 01:08:52,270 Comandos internos, o que eu estava dizendo lá. 930 01:08:52,270 --> 01:08:54,640 Os comandos são parte do shell, como onde. 931 01:08:54,640 --> 01:08:59,880 Quando o shell executa um comando como ls, ele localiza-lo através do caminho, 932 01:08:59,880 --> 01:09:03,029 encontra-lo em algum diretório em algum lugar, 933 01:09:03,029 --> 01:09:05,800 lê-se que para a memória, cria um novo shell, 934 01:09:05,800 --> 01:09:08,960 lê o comando ls ou o que quer para o shell 935 01:09:08,960 --> 01:09:11,450 onde as variáveis ​​de ambiente já estão localizados, 936 01:09:11,450 --> 01:09:14,000 e, em seguida, transfere a execução a ele. 937 01:09:14,000 --> 01:09:18,319 Built-in de comando, o código para que o comando está dentro da casca, 938 01:09:18,319 --> 01:09:21,460 para que o shell só começa a executar parte de seu próprio código. 939 01:09:21,460 --> 01:09:24,569 onde está o tal comando. Ele realmente fica mais rápido. 940 01:09:24,569 --> 01:09:28,380 Ele não tem que ler qualquer coisa na memória, que já está na memória. 941 01:09:28,380 --> 01:09:32,460 Comandos internos sempre têm precedência sobre os comandos com o mesmo nome. 942 01:09:32,460 --> 01:09:36,050 Os comandos que estão em diretórios no caminho pode ter o mesmo nome, 943 01:09:36,050 --> 01:09:39,090 comandos em diferentes diretórios, arquivos em diretórios diferentes. 944 01:09:39,090 --> 01:09:41,740 O que ocorre no início do caminho é o que você vai conseguir. 945 01:09:41,740 --> 01:09:43,770 Se não houver um comando embutido, você sempre buscá-la. 946 01:09:43,770 --> 01:09:47,890 Não há maneira de dar-lhe uma prioridade menor do que um comando no caminho. 947 01:09:47,890 --> 01:09:54,140 Se você deseja obter esse comando caminho, você pode digitar o caminho completo. 948 01:09:54,140 --> 01:09:55,850 Se houvesse um comando, onde o caminho algures, 949 01:09:55,850 --> 01:09:58,440 você pode digitar / bin / onde e que você obtê-lo. 950 01:09:58,440 --> 01:10:01,800 Se você não quiser digitar todo o caminho, você pode definir um alias. 951 01:10:01,800 --> 01:10:06,310 Na verdade, se você deu o alias o mesmo nome que o comando embutido, ele iria trabalhar 952 01:10:06,310 --> 01:10:08,790 porque a definição do alias é avaliada 953 01:10:08,790 --> 01:10:13,220 antes do shell determina que é um comando embutido, que deve ser executado. 954 01:10:18,810 --> 01:10:23,440 Então isso fica um pouco mais complicada, com alguns comandos aqui. 955 01:10:23,440 --> 01:10:29,880 O caso de alguns comandos são realmente comandos embutidos no e no caminho. 956 01:10:29,880 --> 01:10:34,140 Um deles é o eco, o comando eu usei apenas um pouco atrás nesses exemplos. 957 01:10:34,140 --> 01:10:37,410 Eco é um comando no caminho e é em cada concha. 958 01:10:37,410 --> 01:10:40,580 Eles não necessariamente todos se comportam da mesma maneira. 959 01:10:40,580 --> 01:10:42,970 Ele foi originalmente um comando único no caminho. 960 01:10:42,970 --> 01:10:45,280 Foi construído para as conchas mais tarde. 961 01:10:45,280 --> 01:10:48,080 Porque existem opções que dependem do ambiente 962 01:10:48,080 --> 01:10:52,970 e as opções de linha de comando, os comandos internos 963 01:10:52,970 --> 01:10:57,030 foram escritos para funcionar o mesmo que o comando que estava no caminho, 964 01:10:57,030 --> 01:10:59,670 é improvável que teria sido escrito dessa forma 965 01:10:59,670 --> 01:11:01,720 se o comando já não tinha sido escrito para o caminho. 966 01:11:01,720 --> 01:11:06,180 Então, isso tem efeitos colaterais. Sua história tem efeitos aqui. 967 01:11:06,180 --> 01:11:08,380 Há opções lá. 968 01:11:14,280 --> 01:11:23,060 Há também uma opção definida por uma variável no tcsh chamado echo_style. 969 01:11:23,060 --> 01:11:27,700 Essa é uma dessas variáveis ​​que podem mudar a maneira que ecoam obras. 970 01:11:27,700 --> 01:11:30,910 Há outros casos em que você pode atribuir uma variável 971 01:11:30,910 --> 01:11:36,290 que muda a forma que a operação de shell, incluindo um comando integrado, funciona. 972 01:11:36,290 --> 01:11:38,130 Ele não afetará qualquer outra coisa 973 01:11:38,130 --> 01:11:40,640 uma vez que outros comandos não têm acesso às variáveis ​​shell, 974 01:11:40,640 --> 01:11:42,090 apenas as variáveis ​​de ambiente. 975 01:11:42,090 --> 01:11:45,360 Mas as operações de shell pode ler as variáveis ​​de shell. 976 01:11:45,360 --> 01:11:50,710 Isso não vai funcionar para csh. Isso é apenas tcsh. Essa é uma das melhorias. 977 01:11:58,540 --> 01:12:04,620 Análise de seqüências tem quando se avalia metacaracteres 978 01:12:04,620 --> 01:12:08,140 quando se avalia as variáveis, aliases, referências de história. 979 01:12:08,140 --> 01:12:11,830 Há uma seqüência específica para estas coisas. 980 01:12:11,830 --> 01:12:13,730 Se ele faz as coisas de uma determinada seqüência 981 01:12:13,730 --> 01:12:16,080 e chega a algo que é uma expressão de uma espécie 982 01:12:16,080 --> 01:12:20,650 que já tiver sido avaliado, ele não irá avaliar-lo novamente. 983 01:12:20,650 --> 01:12:24,520 Se ele recebe-lo, então ele só vai passar os personagens. 984 01:12:24,520 --> 01:12:29,920 Então, se a avaliação de algumas expressões, como substituição de comando 985 01:12:29,920 --> 01:12:36,850 ou variável ou o que dá origem a uma expressão 986 01:12:36,850 --> 01:12:39,240 que você gostaria de ser avaliado, 987 01:12:39,240 --> 01:12:42,510 que só funcionará se que a avaliação ocorre mais tarde na seqüência. 988 01:12:42,510 --> 01:12:45,010 Espero que eu estou sendo claro lá. 989 01:12:45,010 --> 01:12:50,460 Essa seqüência de análise, uma operação no C-shell, 990 01:12:50,460 --> 01:12:56,490 não é o mesmo para comandos internos quanto para os não-incorporados comandos. 991 01:12:56,490 --> 01:12:58,890 Eu não tenho certeza sobre Bash lá. 992 01:12:58,890 --> 01:13:02,450 Por exemplo, se uma variável shell produziu uma referência história, 993 01:13:02,450 --> 01:13:04,230 ele provavelmente não iria voltar na história. 994 01:13:04,230 --> 01:13:06,010 Seria apenas obter o ponto de exclamação. 995 01:13:06,010 --> 01:13:08,840 Na verdade, podemos apenas tentar isso agora. 996 01:13:09,720 --> 01:13:18,240 definir a = e nós vamos ter que colocar isso aí. 997 01:13:30,690 --> 01:13:34,580 Oh, espere. Desculpe. Eu fiz isso no Bash. Eu queria fazê-lo aqui. 998 01:13:53,470 --> 01:13:56,080 Veja-se, por isso, não avaliou que a referência história 999 01:13:56,080 --> 01:14:00,520 porque já tinha passado o ponto de avaliar expressões de história 1000 01:14:00,520 --> 01:14:02,720 quando se avaliou a variável. 1001 01:14:02,720 --> 01:14:05,550 Então, isso é um efeito de análise. 1002 01:14:05,550 --> 01:14:08,760 E, novamente, comandos internos não são feitas da mesma forma. 1003 01:14:08,760 --> 01:14:11,230 Tudo bem. Vamos para o próximo aqui. 1004 01:14:11,230 --> 01:14:16,060 Este destina-se a ser uma linha, mas está tornando-se mais fácil de ler. 1005 01:14:19,130 --> 01:14:21,530 O que isso faz? 1006 01:14:21,530 --> 01:14:28,640 Você deve se lembrar de que podemos avaliar asteriscos como curingas filename, 1007 01:14:28,640 --> 01:14:33,890 e há outros wildcards filename como o ponto de interrogação e expressões de colchetes. 1008 01:14:33,890 --> 01:14:39,000 Esse tipo de avaliação é chamado de englobamento. 1009 01:14:39,000 --> 01:14:46,290 definir noglob no início deste comando diz para não fazer isso. 1010 01:14:46,290 --> 01:14:53,370 noglob unset diz voltar a fazer isso. 1011 01:14:53,370 --> 01:14:56,440 Note-se que conjunto glob não teria esse efeito. 1012 01:14:56,440 --> 01:15:00,800 Em linguagem comum, definir glob ou noglob unset parece ser equivalente, 1013 01:15:00,800 --> 01:15:03,290 mas aqui não é. É noglob desactivado. 1014 01:15:05,120 --> 01:15:07,910 Agora TSET. tset representava conjunto terminal. 1015 01:15:07,910 --> 01:15:11,840 Não é usado, que muitas vezes agora, mas antes que os sistemas de janelas tornou-se disponível 1016 01:15:11,840 --> 01:15:15,760 e você tinha um único terminal, você pode ter que determinar o tipo. 1017 01:15:15,760 --> 01:15:18,700 E se alguma coisa estava vindo uma rede Ethernet ou da rede, 1018 01:15:18,700 --> 01:15:21,120 você pode querer dizer que é um vt100. 1019 01:15:21,120 --> 01:15:26,630 VT100 é uma espécie de padrão no negócio terminal. Ele vem do terminal DEC. 1020 01:15:26,630 --> 01:15:35,270 Se você acabou de fazer discada - percebeu isso? Isso remonta um longo caminho, não é? 1021 01:15:35,270 --> 01:15:39,520 Então, se nós simplesmente TSET aqui, 1022 01:15:39,520 --> 01:15:45,250 se eu só faço tset, está redefinindo o meu terminal, mas você não viu nada. 1023 01:15:45,250 --> 01:15:47,340 Ele realmente não muda nada. 1024 01:15:47,340 --> 01:15:48,620 -S 1025 01:15:49,900 --> 01:15:51,480 Okay. 1026 01:15:51,480 --> 01:15:53,350 PRAZO setenv xterm-color. 1027 01:15:53,350 --> 01:15:57,080 Nós já sabemos que o termo foi criado dessa maneira, de modo que não se alterou. 1028 01:15:57,080 --> 01:15:58,860 Essa é a maneira que gostaria de fazê-lo. 1029 01:15:58,860 --> 01:16:07,080 Mas note que este comando, tset-s, apenas saída desses comandos. Ele não executá-los. 1030 01:16:07,080 --> 01:16:09,770 Não execute estes comandos, mas a saída deles. 1031 01:16:09,770 --> 01:16:13,650 Portanto, este se destina a produzir comandos que será executado. 1032 01:16:13,650 --> 01:16:16,360 Você se lembra do comando nesse arquivo que acabei de mostrar que tinha um Q nele. 1033 01:16:16,360 --> 01:16:18,910 Então, vamos fazer isso. 1034 01:16:18,910 --> 01:16:23,750 O Q suprime alguma saída, mas isso não importa aqui, como você pode ver. 1035 01:16:23,750 --> 01:16:27,980 Eu só estou fazendo isso para mostrar que isso não importava. 1036 01:16:27,980 --> 01:16:31,870 Isto está em sintaxe crase. 1037 01:16:31,870 --> 01:16:35,340 Note-se a crase aqui, crase aqui. 1038 01:16:35,340 --> 01:16:37,680 Estou omitindo essas coisas aqui. 1039 01:16:37,680 --> 01:16:39,570 Estes são casos de dizer o que fazer 1040 01:16:39,570 --> 01:16:42,050 no caso de certos tipos de terminais - 1041 01:16:42,050 --> 01:16:45,400 Ethernet, rede dial-up, o que você tem. 1042 01:16:45,400 --> 01:16:48,050 Não importa aqui, porque nós não estamos realmente fazendo qualquer uma dessas coisas. 1043 01:16:48,050 --> 01:16:49,720 Eu só estou ilustrando o comando. 1044 01:16:49,720 --> 01:16:55,170 Se eu fizer isso com a crase, o que é que eu vou conseguir? 1045 01:16:55,170 --> 01:17:00,210 Além disso, observe aqui que este incluiu a noglob conjunto ea noglob desactivado, 1046 01:17:00,210 --> 01:17:02,630 Portanto, estas são agora redundantes na definição. 1047 01:17:02,630 --> 01:17:05,380 Isso nem sempre é verdade, mas agora eles estão incluídos neste comando. 1048 01:17:05,380 --> 01:17:08,890 Mas vamos ver o que acontece se eu fizer isso 1049 01:17:08,890 --> 01:17:12,570 e vá para o início da linha com controle A e eu faço isso. 1050 01:17:14,380 --> 01:17:18,040 Ok, definir: Comando não encontrado. Isso é meio estranho, não é? 1051 01:17:18,040 --> 01:17:20,570 conjunto é um comando conhecido. É parte da casca. 1052 01:17:20,570 --> 01:17:24,040 definir: Command not found? Por que isso? 1053 01:17:24,040 --> 01:17:26,790 Hmm. Bem, vamos pensar sobre isso. 1054 01:17:26,790 --> 01:17:31,100 Está funcionando uma substituição de comando crase, 1055 01:17:31,100 --> 01:17:37,430 e que ocorre com uma certa parte da sequência de analisar o comando. 1056 01:17:37,430 --> 01:17:40,360 conjunto é um comando embutido. 1057 01:17:40,360 --> 01:17:43,900 Então, no momento em que ele faz isso substituição de comando, 1058 01:17:43,900 --> 01:17:48,280 ele já conseguiu passar o ponto de identificação de comandos internos. 1059 01:17:48,280 --> 01:17:51,900 Por isso, trata definido como se fosse um comando no caminho. 1060 01:17:51,900 --> 01:17:55,440 Escusado será dizer que ele não encontrá-lo, e você obterá um erro. 1061 01:17:55,440 --> 01:17:59,300 Well. Há um exemplo de seqüência de análise. 1062 01:17:59,300 --> 01:18:01,460 E o que vamos fazer sobre isso? 1063 01:18:01,460 --> 01:18:04,800 Observe este comando muito interessante aqui, eval. 1064 01:18:04,800 --> 01:18:06,530 Eu me pergunto o que faz. 1065 01:18:06,530 --> 01:18:08,760 Se você olhar para o manual - e vamos fazer isso 1066 01:18:08,760 --> 01:18:12,000 para mostrar o quão confuso esses manuais são - 1067 01:18:12,000 --> 01:18:19,400 homem tcsh, manual confuso, encontrar as coisas por aqui não é fácil. 1068 01:18:19,400 --> 01:18:31,850 Aqui vamos nós, eval arg, para que possamos ter um ou mais argumentos 1069 01:18:31,850 --> 01:18:34,090 e há uma lista de coisas lá. 1070 01:18:34,090 --> 01:18:37,730 Trata os argumentos como entradas para o shell 1071 01:18:37,730 --> 01:18:43,600 e executa os comandos resultantes no contexto do reservatório actual. 1072 01:18:43,600 --> 01:18:46,900 Isso geralmente é usado para executar comandos gerados como resultado do comando 1073 01:18:46,900 --> 01:18:51,310 ou substituição de variáveis ​​de análise, porque ocorre antes estas substituições. 1074 01:18:51,310 --> 01:18:52,580 Muito bom. 1075 01:18:52,580 --> 01:18:54,740 E aqui eles ainda se referem ao comando tset para um uso amostra 1076 01:18:54,740 --> 01:18:57,700 como a que eu acabei de mostrar. 1077 01:18:57,700 --> 01:19:00,440 Agora eu tenho que obter a janela de volta a um lugar útil. 1078 01:19:03,150 --> 01:19:07,800 Vamos começar por aqui e vamos ver o que eval é usado um pouco antes disso. 1079 01:19:07,800 --> 01:19:14,010 Então, vamos ver o que acontece se colocarmos - aqui vamos nós com as setas para que o comando 1080 01:19:14,010 --> 01:19:20,940 e controlar um ao início, eval. 1081 01:19:20,940 --> 01:19:22,850 Ok, então ele funciona. 1082 01:19:22,850 --> 01:19:26,440 Quando você faz eval, leva o que vem depois ea torna um comando. 1083 01:19:26,440 --> 01:19:29,460 Isso permite que você analisá-lo essencialmente duas vezes. 1084 01:19:29,460 --> 01:19:33,710 A seção aqui executa esse comando dentro da crase, 1085 01:19:33,710 --> 01:19:36,210 recebe a saída. 1086 01:19:36,210 --> 01:19:42,850 A saída é suposto para ser executado como os comandos aqui como estes 1087 01:19:42,850 --> 01:19:45,890 a este e este. 1088 01:19:45,890 --> 01:19:50,100 Assim, os comandos são agora aqui nesta seqüência, 1089 01:19:50,100 --> 01:19:58,950 mas estes são comandos embutidos no e não pode obtê-los de imediato. 1090 01:19:58,950 --> 01:20:06,440 Então vamos para eval, eval pega aquilo, a coisa toda começa tudo de novo, e ele funciona. 1091 01:20:06,440 --> 01:20:18,460 Um exemplo tanto de backquoting, eval, análise, consequências de análise, 1092 01:20:18,460 --> 01:20:21,910 e um comando que é provavelmente de muito pouca utilidade para você hoje em dia. 1093 01:20:21,910 --> 01:20:25,540 Okay. Tudo bem, umask. 1094 01:20:25,540 --> 01:20:32,160 Vejamos este comando aqui, umask 022. Eu me pergunto o que faz. 1095 01:20:32,160 --> 01:20:38,420 Vamos apenas digite umask com nada depois. 22. Okay. 1096 01:20:38,420 --> 01:20:44,350 022 e fazê-lo novamente. 1097 01:20:44,350 --> 01:20:48,580 Como você deve ter adivinhado, umask sem argumentos diz-lhe a máscara atual; 1098 01:20:48,580 --> 01:20:51,760 umask com argumentos que o torna, mas isso era o que eu já tinha. 1099 01:20:51,760 --> 01:20:53,800 O que 022 significa? 1100 01:21:01,650 --> 01:21:07,080 Estes são aqui as proteções para um arquivo. 1101 01:21:07,080 --> 01:21:11,440 Eles determinam quem tem permissão para ler, escrever ou executar o arquivo. 1102 01:21:11,440 --> 01:21:16,560 Proteções são também chamados de permissões. 1103 01:21:16,560 --> 01:21:21,390 O r significa leitura, o w para gravação, 1104 01:21:21,390 --> 01:21:25,500 e x, que não está presente ali, está para ser executado. 1105 01:21:25,500 --> 01:21:27,260 Existem 3 categorias de lá. 1106 01:21:27,260 --> 01:21:33,540 Os últimos três elementos estão na categoria de usuário. Aqueles aplica a mim, o usuário. 1107 01:21:33,540 --> 01:21:36,870 Estes três aqui se aplicam ao grupo. 1108 01:21:36,870 --> 01:21:41,590 O arquivo pertence a um grupo, o usuário pode pertencer a vários grupos, 1109 01:21:41,590 --> 01:21:47,150 mas se o usuário está no grupo ao qual este arquivo pertence, 1110 01:21:47,150 --> 01:21:51,090 em seguida, essas proteções serão aplicadas a ele, se ele não é o usuário. 1111 01:21:51,090 --> 01:21:54,230 E esta é toda a gente. 1112 01:21:55,540 --> 01:21:57,690 Essas categorias são mutuamente exclusivas. 1113 01:21:57,690 --> 01:21:59,750 As proteções usuário se aplicam a ele, 1114 01:21:59,750 --> 01:22:03,780 as proteções de grupo se aplica aos membros do grupo que não o usuário, 1115 01:22:03,780 --> 01:22:08,110 e as outras proteções só se aplica a outros que não o usuário e os membros do grupo de pessoas. 1116 01:22:08,110 --> 01:22:12,320 Se houver um r ou aw ou um x, isso significa que a proteção é concedida. 1117 01:22:12,320 --> 01:22:13,950 Se há um hífen, isso significa que ele não é. 1118 01:22:13,950 --> 01:22:16,690 Há, na verdade, são outras coisas que podem ser colocados aqui para além destes, 1119 01:22:16,690 --> 01:22:18,350 que eu não vou entrar agora. 1120 01:22:18,350 --> 01:22:24,450 A umask define um padrão para os arquivos que você criar. 1121 01:22:24,450 --> 01:22:28,580 E, como uma máscara, basicamente ele diz que os bits que você não definir. 1122 01:22:28,580 --> 01:22:30,450 Como é que isso se torne pedaços? 1123 01:22:30,450 --> 01:22:33,240 Se você pensar em cada um deles como um número octal, 1124 01:22:33,240 --> 01:22:42,120 este é o bit de 1s, este é o 2s, este é o 4s. 1125 01:22:42,120 --> 01:22:45,840 Então, de 0 a 7 1126 01:22:45,840 --> 01:22:51,770 irá descrever o que combinação de r de, w do e X do que você tem para estes 3 1127 01:22:51,770 --> 01:22:53,710 e, em seguida, um número semelhante para estas e, em seguida, para estes. 1128 01:22:53,710 --> 01:23:12,030 Então, 022 significa 0 para a outra, para o grupo 2, 2 para o utilizador. 1129 01:23:12,030 --> 01:23:15,870 Mas esta é uma máscara. A máscara é o que você não tem. 1130 01:23:19,380 --> 01:23:20,610 Sinto muito. Eu apenas dei-lhe coisas na ordem errada. 1131 01:23:20,610 --> 01:23:25,620 É a primeira 3. Estes são três o utilizador, estes três são o grupo, estes três são o outro. 1132 01:23:25,620 --> 01:23:27,970 Desculpe eu te dei estes na ordem errada. 1133 01:23:27,970 --> 01:23:31,910 O 0, que é o primeiro desses, não exibe o valor, 1134 01:23:31,910 --> 01:23:35,430 mas se um número não é lá, é um 0. 1135 01:23:35,430 --> 01:23:38,370 Isso significa que todos os 3 destes seria permitido. 1136 01:23:38,370 --> 01:23:41,550 Observe que nesse particular o x não é permitido. 1137 01:23:41,550 --> 01:23:44,090 A razão é que o reservatório é capaz de determinar 1138 01:23:44,090 --> 01:23:46,260 se um arquivo deve ser executado ou não. 1139 01:23:46,260 --> 01:23:49,800 Uma vez que este não é um arquivo executável, ele não definiu o x. 1140 01:23:49,800 --> 01:23:54,000 Os dois meios que escrever permissão, a segunda categoria aqui, 1141 01:23:54,000 --> 01:23:56,500 a do meio, é negado. 1142 01:23:56,500 --> 01:23:58,500 Então, novamente, estas são as coisas que ele negou. 1143 01:23:58,500 --> 01:24:02,080 Bem, x é permitido, mas não é aqui, porque não é executável 1144 01:24:02,080 --> 01:24:04,260 e da mesma forma para os outros. 1145 01:24:04,260 --> 01:24:08,880 Então isso é um umask comum. 1146 01:24:08,880 --> 01:24:14,630 Outro comum é de 700 - dar-se tudo e ninguém mais nada. 1147 01:24:14,630 --> 01:24:17,040 E há outras possibilidades. 1148 01:24:21,340 --> 01:24:27,110 Eu vou voltar a isso. Usando a história posso pesquisar para trás, para isso, LWH de lá. 1149 01:24:27,110 --> 01:24:30,210 Okay. Então, aqui, essas são as conchas. 1150 01:24:30,210 --> 01:24:36,020 Bash, o proprietário que é conta do sistema, pode fazer tudo. 1151 01:24:36,020 --> 01:24:41,210 Grupo e todos os outros podem fazer ler ou executar, mas não escrever. 1152 01:24:41,210 --> 01:24:44,570 Este nem sequer permitem que o proprietário de escrever para ele. 1153 01:24:44,570 --> 01:24:46,460 Se o proprietário queria escrever para ele, a conta do sistema, 1154 01:24:46,460 --> 01:24:48,020 ele teria que mudar a proteção primeiro. 1155 01:24:48,020 --> 01:24:53,940 Mas, novamente, o umask define o padrão, mascarando-o, 1156 01:24:53,940 --> 01:24:57,160 indicando os bits que não serão criados. 1157 01:24:57,160 --> 01:25:04,380 Isto é tipicamente em um dos seus arquivos de inicialização, que é o. Cshrc para o C-shell 1158 01:25:04,380 --> 01:25:07,500 ou o perfil. por as conchas Bourne tipo. 1159 01:25:07,500 --> 01:25:12,520 Ele pode ser também em outros lugares, se existem outros arquivos de inicialização do sistema. 1160 01:25:12,520 --> 01:25:14,610 De qualquer forma, isso é umask. 1161 01:25:14,610 --> 01:25:18,180 Há algo meio estranho aqui, 1162 01:25:18,180 --> 01:25:22,800 e que é, porque é que há um único comando para isso? 1163 01:25:22,800 --> 01:25:28,690 Se eu estivesse escrevendo isso, eu faria uma variável, umask = algum valor. 1164 01:25:28,690 --> 01:25:31,100 Porque é que existe um comando inteiro apenas para esta finalidade? 1165 01:25:31,100 --> 01:25:34,560 A razão é esta só vai voltar às origens do Unix. 1166 01:25:34,560 --> 01:25:41,050 Unix era apenas um projeto de programação no Bell Labs no início de 1970. 1167 01:25:41,050 --> 01:25:42,610 As pessoas simplesmente se reuniram para programa. 1168 01:25:42,610 --> 01:25:45,290 Eles nunca pretenderam que ele se torne um sistema operacional de todo o mundo. 1169 01:25:45,290 --> 01:25:47,250 Diferentes pessoas escreveram diferentes partes sem pensar muito 1170 01:25:47,250 --> 01:25:49,790 de como eles estavam indo para ser usado - em vez esboçado. 1171 01:25:49,790 --> 01:25:53,290 E veio junto assim, e ainda é assim em alguns aspectos. 1172 01:25:53,290 --> 01:25:57,930 Então, que reflete a história, e ainda existem estas inconsistências e elementos ímpares do mesmo. 1173 01:25:57,930 --> 01:26:00,750 Okay. Next one aqui. 1174 01:26:08,170 --> 01:26:11,000 Como escrevi anteriormente, o C-shell não é realmente muito usado para programação, 1175 01:26:11,000 --> 01:26:12,420 embora possa ser. 1176 01:26:12,420 --> 01:26:15,080 Ele executa mais lentamente, mais uma vez o trade-off entre o uso interativo, 1177 01:26:15,080 --> 01:26:17,820 que tem mais do que a velocidade de processamento envolvido, 1178 01:26:17,820 --> 01:26:20,710 que pode fazer sem o processamento. 1179 01:26:20,710 --> 01:26:28,320 Os recursos extras adicionados ao shell Bourne pelo Korn e Bourne-Again conchas 1180 01:26:28,320 --> 01:26:32,120 parecem não atrasá-los, e eu não sei por que isso acontece. 1181 01:26:32,120 --> 01:26:36,310 Poderia ser apenas uma melhor programação, mas eu não estou em posição de saber. 1182 01:26:36,310 --> 01:26:40,420 Acelerar aqui, na verdade, não é um negócio tão grande, embora seja mencionada. 1183 01:26:40,420 --> 01:26:43,690 A razão é que scripts shell realmente ficar bastante rápido. 1184 01:26:43,690 --> 01:26:46,450 Se houver um monte de comandos como em um programa de calculacional, 1185 01:26:46,450 --> 01:26:49,110 você provavelmente não iria fazê-lo em um script shell. 1186 01:26:49,110 --> 01:26:51,450 As operações que são bastante simples e direto. 1187 01:26:51,450 --> 01:26:53,960 Os que eu experimentei que são demasiado lentos 1188 01:26:53,960 --> 01:26:57,110 envolvem aplicações repetidas de comandos lentos. 1189 01:26:57,110 --> 01:27:00,480 Mencionei o editor de fluxo sed. Esse comando é lento. 1190 01:27:00,480 --> 01:27:03,760 Se você executar várias vezes sed, você vai ter um script lento, mas não é o shell que é lento. 1191 01:27:03,760 --> 01:27:07,920 Executá-lo no shell Bourne não será muito mais rápido do que executá-lo no C-shell, 1192 01:27:07,920 --> 01:27:10,070 embora haja talvez algumas vantagens lá. 1193 01:27:10,070 --> 01:27:12,760 As capacidades de programação adicionais, por outro lado, 1194 01:27:12,760 --> 01:27:17,920 são razões significativas por que você iria usar as conchas do tipo Bourne. 1195 01:27:17,920 --> 01:27:21,390 C-shell tem características ímpares para isso - 1196 01:27:21,390 --> 01:27:25,250 o fato de que você não sabe se uma variável é uma variável shell ou uma variável de ambiente. 1197 01:27:25,250 --> 01:27:27,440 Ele pode ser muito confuso. 1198 01:27:27,440 --> 01:27:32,170 Não é tão fácil de escrever 1199 01:27:32,170 --> 01:27:35,930 apenas com base em sua experiência de programação em outras línguas. 1200 01:27:35,930 --> 01:27:41,350 Eu acho que você pode encontrar as conchas Bourne tipo mais consistente com a sua experiência. 1201 01:27:43,730 --> 01:27:49,270 Alguns scripts, porém, pode haver milhares de linhas de comprimento. 1202 01:27:49,270 --> 01:27:52,450 Aqueles que eu vi são usados ​​para remendar sistemas operacionais. 1203 01:27:52,450 --> 01:27:55,450 Aqueles podem executar muito lentamente, mas você não executar aqueles com muita freqüência. 1204 01:27:55,450 --> 01:27:57,180 É só quando você está fazendo correções, 1205 01:27:57,180 --> 01:27:59,450 e é apenas o gestor do sistema que faz essas coisas, 1206 01:27:59,450 --> 01:28:01,840 por isso não é realmente um grande problema. 1207 01:28:01,840 --> 01:28:06,980 Aqueles que são centenas de linhas de longo realmente executar rapidamente. 1208 01:28:06,980 --> 01:28:10,540 Mencionando isso aqui, quais são essas melhorias? 1209 01:28:10,540 --> 01:28:13,170 Eu já mencionei alguns deles - arrays, cálculos, 1210 01:28:13,170 --> 01:28:20,540 os $ () de expressão para cálculos no shell bash, 1211 01:28:20,540 --> 01:28:23,050 o outro tipo de substituição de comando. 1212 01:28:23,050 --> 01:28:25,360 Existem diferentes tipos de comandos de teste 1213 01:28:25,360 --> 01:28:29,350 pelo qual você pode fazer testes condicionais sobre a existência de um arquivo ou outras coisas. 1214 01:28:29,350 --> 01:28:34,790 Última visita, este comando aqui. 1215 01:28:34,790 --> 01:28:38,480 O que isso faz, e por que alguém iria usá-lo? 1216 01:28:51,170 --> 01:28:52,990 variablename printenv. 1217 01:28:52,990 --> 01:28:56,130 Nós sabemos o que printenv faz. Diz-nos o valor de uma variável. 1218 01:28:56,130 --> 01:29:00,850 E variablename printenv não nos dizem muito, porque não há tal variável. 1219 01:29:03,550 --> 01:29:05,120 Em branco. 1220 01:29:05,120 --> 01:29:08,440 Mas vamos dar-lhe algo significativo. 1221 01:29:13,420 --> 01:29:16,800 Isso não é lá também. Okay. Acho que nunca definiu que. 1222 01:29:16,800 --> 01:29:18,020 Vamos verificar o meu ambiente. 1223 01:29:18,020 --> 01:29:20,900 Este é outro comando pelo qual você pode inspecionar seu ambiente. 1224 01:29:20,900 --> 01:29:24,470 Há boas EDITOR de idade, o que vimos antes. 1225 01:29:42,360 --> 01:29:44,120 O que isso faz? 1226 01:29:44,120 --> 01:29:48,050 Aqui temos uma expressão de crase. 1227 01:29:48,050 --> 01:29:50,370 Lembre-se esta é a C-shell. 1228 01:29:50,370 --> 01:29:54,850 Então EDITOR printenv nos dará um valor de EDITOR. É vi. 1229 01:29:54,850 --> 01:29:59,790 E, em seguida, ele irá definir o valor para a variável a, o comando set. 1230 01:29:59,790 --> 01:30:02,860 Portanto, agora se eu faço echo $ a, eu recebo vi. 1231 01:30:02,860 --> 01:30:05,850 Isso não parece muito útil. 1232 01:30:05,850 --> 01:30:08,080 No entanto, ele realmente tem um propósito. 1233 01:30:08,080 --> 01:30:12,260 Desde que nós não sabemos se a variável é uma variável shell ou uma variável de ambiente 1234 01:30:12,260 --> 01:30:16,280 usando a sintaxe avaliação cifrão, podemos usar printenv 1235 01:30:16,280 --> 01:30:19,460 para certificar-se de que é uma variável de ambiente. 1236 01:30:19,460 --> 01:30:22,550 Então, se houvesse um editor variável shell, isso não teria conseguido. 1237 01:30:22,550 --> 01:30:25,640 Isto funciona apenas com a variável de ambiente. 1238 01:30:25,640 --> 01:30:28,370 Se houvesse uma variável shell e eu queria que o seu valor, 1239 01:30:28,370 --> 01:30:29,980 Eu teria que encontrar outra maneira de fazê-lo. 1240 01:30:29,980 --> 01:30:33,530 Uma maneira de fazer isso seria fazendo conjunto e tubagens. 1241 01:30:33,530 --> 01:30:36,130 Este é um dos metacaracteres, caracteres especiais. 1242 01:30:36,130 --> 01:30:38,370 Ele envia a saída do conjunto para outra coisa. 1243 01:30:38,370 --> 01:30:40,650 Vamos ver o que podemos encontrar lá. 1244 01:30:40,650 --> 01:30:49,340 Nada. Okay. Vamos ver o que está lá todos juntos. 1245 01:30:49,340 --> 01:30:53,580 Foi echo_style, aquele que eu mencionei antes. Ok, vamos fazer isso. 1246 01:31:02,460 --> 01:31:06,230 Lembre-se que eu mencionei antes, echo_style 1247 01:31:06,230 --> 01:31:08,410 determina a forma como o comando echo será executado. 1248 01:31:08,410 --> 01:31:10,940 BSD significa Distribuição Berkeley padrão. 1249 01:31:10,940 --> 01:31:13,200 Este é o Berkeley Unix a partir dos anos 1970. 1250 01:31:13,200 --> 01:31:16,630 Essa é uma das formas que ecoam pode ser executado. 1251 01:31:16,630 --> 01:31:22,310 Definir echo_style a esse valor no TC-shell fará eco para se comportar dessa maneira. 1252 01:31:22,310 --> 01:31:27,670 Portanto, definir faz isso, mas só recebe definir variáveis ​​shell. 1253 01:31:27,670 --> 01:31:35,430 Ele não iria encontrar EDITOR, que não é uma variável shell. 1254 01:31:36,870 --> 01:31:38,050 Nada. 1255 01:31:38,050 --> 01:31:39,660 Então essa é uma maneira de distingui-los. 1256 01:31:39,660 --> 01:31:42,000 Mas o fato de que você tem que passar por algum comando estranho assim 1257 01:31:42,000 --> 01:31:45,500 distinguir entre variáveis ​​shell ou variáveis ​​ambientais 1258 01:31:45,500 --> 01:31:49,970 mostra o tipo de natureza impraticável do C-shell para algumas finalidades. 1259 01:31:52,290 --> 01:31:57,960 E agora, por último e talvez menos, isso é as páginas do manual. 1260 01:31:57,960 --> 01:32:03,190 Aqueles de quem você deve saber, o homem é o curto comando para manual. 1261 01:32:03,190 --> 01:32:08,610 As páginas de manual para as conchas são difíceis de ler. Eles são muito longos. 1262 01:32:08,610 --> 01:32:14,060 Eles estão organizados de uma forma que pode tornar difícil para encontrar o que você está procurando. 1263 01:32:14,060 --> 01:32:15,980 Então, se você está procurando algo com um propósito, 1264 01:32:15,980 --> 01:32:20,050 você não pode saber se o efeito é uma variável shell ou outra coisa, 1265 01:32:20,050 --> 01:32:21,630 assim você pode não saber para onde olhar para ele. 1266 01:32:21,630 --> 01:32:25,030 Você pode olhar para várias cordas, mas as cordas são muitas vezes repetida. 1267 01:32:25,030 --> 01:32:27,640 Por isso, é geralmente difícil de ler. 1268 01:32:27,640 --> 01:32:33,810 Nós apenas olhou para a página man TC-shell um pouco antes de encontrar o comando eval. 1269 01:32:33,810 --> 01:32:36,610 Algumas coisas andam mais rápido. 1270 01:32:36,610 --> 01:32:38,860 Uma abordagem é a busca de uma string. 1271 01:32:38,860 --> 01:32:40,360 Você pode usar o pager. 1272 01:32:40,360 --> 01:32:49,080 Pager tem a barra para procurar um comando ou uma seqüência dentro de uma operação de pager. 1273 01:32:49,080 --> 01:32:52,830 Homem por padrão usará pagers, ou ser mais ou menos. 1274 01:32:52,830 --> 01:32:56,560 Eu não sei se você está familiarizado com esses, mas esses podem mostrar arquivos pouco a pouco. 1275 01:32:56,560 --> 01:33:00,550 Eu tenho usado a menos para exibir esses arquivos particulares que temos aqui. 1276 01:33:00,550 --> 01:33:03,300 Você pode procurar lá dentro. 1277 01:33:03,300 --> 01:33:04,880 Você pode tentar usar diferentes seqüências de pesquisa. 1278 01:33:04,880 --> 01:33:08,420 Também páginas de manual em diferentes sistemas operacionais podem não ser os mesmos. 1279 01:33:08,420 --> 01:33:11,130 Eles podem ser páginas separadas para csh e tcsh. 1280 01:33:11,130 --> 01:33:14,500 Eles não estão no Mac, mas eles poderiam ser se esses são comandos separados. 1281 01:33:14,500 --> 01:33:19,000 Se sh realmente não chamar Bash, provavelmente haveria uma página homem separado. 1282 01:33:19,000 --> 01:33:25,820 Alguns sistemas possuem páginas de manual em separado apenas para o C-shell comandos internos. 1283 01:33:25,820 --> 01:33:30,250 Às vezes, se você quiser ler a descrição de um comando embutido 1284 01:33:30,250 --> 01:33:35,350 que também é o caminho, como eco, você precisa ler a página de manual em que comando o eco 1285 01:33:35,350 --> 01:33:37,610 para determinar como ele vai funcionar como um comando embutido 1286 01:33:37,610 --> 01:33:39,760 mesmo se você não está chamando o comando embutido. 1287 01:33:41,630 --> 01:33:46,090 Isto é uma desvantagem do sistema operativo, em geral, não só para os reservatórios, 1288 01:33:46,090 --> 01:33:50,710 embora para as conchas, em particular as páginas do manual são bastante longo, 1289 01:33:50,710 --> 01:33:56,180 em parte porque eles adicionaram características úteis para eles, o que pode ser um positivo. 1290 01:33:56,180 --> 01:34:00,290 Okay. Alguma pergunta? Quaisquer tópicos que pretende trazer? 1291 01:34:00,290 --> 01:34:03,390 Qualquer coisa relevante aqui? 1292 01:34:04,540 --> 01:34:07,100 Bem, foi muito bom falar com você todos. 1293 01:34:07,100 --> 01:34:09,690 Eu espero que você tenha algo fora deste seminário 1294 01:34:09,690 --> 01:34:13,080 que serão úteis para você em seus futuros empreendimentos. 1295 01:34:17,330 --> 01:34:19,000 [CS50.TV]