Difference in cd .. e cd .. (Mudar Diretório) [duplicado]

1

cd.. e cd .. .

Basicamente, eles estão fazendo o mesmo. Mas quem e por que pensou em mudá-lo com espaço ou sem espaço? Por que há espaço e por que não há espaço entre o cd e dois pontos?

C:\Windows\System32>cd..

e

[bla/www/something/something]#cd ..

Eles são os mesmos. Por que um tem espaço e outro não?

EDITAR:

Não é duplicado desta questão:.

Por que o "cd .." funciona no Windows linha de comando?

    
por Josip Ivic 19.07.2016 / 16:29

1 resposta

1

Em sistemas semelhantes a UNIX, o shell sh separa o que você digita em palavras e passa cada palavra separadamente como um argumento para o programa ou comando interno referido pela primeira palavra (o nome do comando em si é o argumento zeroth ). Simplificado, as palavras são divididas em cada espaço. Assim,

cd ..

é duas palavras, mas

cd..

é apenas um. Não há nenhum comando chamado cd.. no UNIX, portanto, o último falha. O primeiro invoca cd com o único argumento .. , alterando um diretório para cima. Para um exemplo mais complicado,

echo foo bar  baz   quux

é analisado nas quatro palavras echo , foo , bar , baz e quux , que são então passadas para o comando echo como seus argumentos. A quantidade de espaçamento entre é perdida e echo será impresso

foo bar baz quux

como sempre insere um espaço em branco entre cada argumento.

No Windows, DOS e CP / M, o shell COMMAND.COM analisa o nome do comando como o prefixo mais longo do que você digitou até que um espaço ou pontuação seja atingido (isso também é uma simplificação). Então o comando é executado com a linha inteira que você digitou como argumento. Um ponteiro indica onde o interpretador de comandos acredita que o nome do comando terminou. COMMAND.COM não divide a linha de comando em argumentos, se o programa deseja que isso aconteça, tem que fazê-lo.

Por exemplo, em cd .. , o shell decide que cd é o nome do comando, que por acaso é um comando interno. O comando interno é executado com a string de argumento sendo cd .. e as informações de que os dois primeiros caracteres formam o nome do comando. Da mesma forma, para cd.. , o shell decide que cd é o nome do comando e passa .. como o nome do operando. O comando cd ignora o nome do comando, apara o restante do espaço em branco e, em seguida, tenta alterar para o diretório mencionado.

Da mesma forma,

echo foo bar  baz   quux

o shell invoca o comando echo com echo foo bar baz quux conforme os argumentos e echo imprime

foo bar  baz   quux

Esta é a razão pela qual cd.. funciona no DOS, mas não no UNIX.

Ambos os projetos têm seus prós e contras, embora o estilo UNIX tenha assumido quase todos os sistemas, pois é muito mais fácil programar contra, pois apenas um programa (o shell) precisa saber como dividir uma linha de comando em palavras como se opõe a todo programa que tenha sua própria solução caseira.

    
por 19.07.2016 / 18:34