
Fiquei me perguntando, ao desenvolver algum aplicativo (embora esta não seja uma questão de desenvolvimento), se o cd
comando usado no Windows é uma espécie de curinga ou comando de plataforma cruzada. Procurei na tabela com comandos para Unix/Linux e MAC OS X e parece que ela está lá. Não sou usuário de vários sistemas operacionais, então pergunto se alguém com experiência em diferentes sistemas operacionais pode me dizer:
- Se este comando realmente existe e funciona
- Se tiver a mesma funcionalidade (mudar de diretório)
- Se houver algum problema com seu uso
- Se em algum sistema operacional houver outro comando de linha de comando que faça o mesmo de uma maneira melhor/mais elaborada/mais usada com frequência.
Desde já, obrigado!
(PSI não tenho 100% de certeza se esta pergunta pertence a este site ou a algum outro site stackexchange...)
(PPS Qualquer ajuda para marcar isso será apreciada!)
Responder1
Se este comando realmente existe e funciona
Hum, sim, existe e funciona.
Se tiver a mesma funcionalidade (mudar de diretório)
Sim; sim. Isso não quer dizer que alguém não possa simplesmente criar um programa (por exemplo, cd.exe
) que faça outra coisa, mas geralmente é um comando embutido no shell e altera o diretório atual.
Se houver algum problema com seu uso
Que tipo de problemas? Além de .
e ..
, sua sintaxe é bastante simples. A única complicação é alterar o diretório atual em outros volumes (letras de unidade). Além disso, as extensões de comando no Windows estendem um pouco seu uso, mas nada que possa causar problemas reais.
Se em algum sistema operacional houver outro comando de linha de comando que faça o mesmo de uma maneira melhor/mais elaborada/mais usada com frequência.
Na verdade. Pode haver outros comandos, mas cd
é bom e curto e funciona. Além de alterar a unidade atual além do diretório (por exemplo, cd /d t:\blah
), como exatamente a alteração do diretório atual poderia ser melhorada?
Isso não é exatamente o assunto (embora esteja relacionado), mas aparentemente algumas pessoas não conseguem aceitar que o CD
comando nãoterpara ser embutido no shell. O fato é que isso acontecenão; istopodeser um programa externo. Alguns sistemas operacionais facilitam, outros dificultam e alguns podem até impossibilitar, mas o fato é quepodeser externo e nãosempre tem que ser construídocomo alguns querem que você acredite. Por exemplo, nas versões de 32 bits do Windows, incluindo XP e 7, você pode aproveitar o fato de que o subsistema do console (que é como os programas em modo texto são suportados e executados no Windows) suporta a antiga interrupção “DOS” 0x21— sim, mesmo em cmd
, não apenas em `command. (Não funcionará em versões de 64 bits do Windows porque eles perderam muita compatibilidade com versões anteriores.)
Por exemplo, você pode salvar o script de depuração abaixo como c.scr
e compilá-lo executando a debug < c.scr
partir da linha de comando. Ele criará um .com
arquivo que você pode usar para alterar o diretório atual.
a
mov si,82
mov dl,[si]
or dl,20
sub dl,61
mov ah,e
int 21
mov dl,[si]
cmp dl,d
jz 119
inc si
jmp 10f
xor dl,dl
mov [si],dl
mov dx,82
mov ah,3b
int 21
mov ah,4c
int 21
n c.com
rcx
28
w
q
(Observe que ele não suporta nomes de arquivos longos, então você precisará usar o8.3versão. Ele também altera a unidade atual, para que você possa alterar o diretório para outra unidade de uma só vez, mas faz isso de uma maneira muito simples e não faz nenhuma verificação de erros, portanto, tente mudar para um diretório que começa com um letra para a qual existe uma unidade não funcionará. Ou seja, c c:\windows
funcionará como quiser c \windows
, mas c asd
não funcionará se você tiver uma A:
unidade, a menos que ela contenha um diretório chamado asd
. Você pode estendê-lo e adicionar verificação de erros e coisas assim, se quiser, mas isso prova meu ponto de vista sobre a possibilidade de cd
ser externo no Windows.)
Você também pode salvar o seguinte programa Pascal (por exemplo, como c.pas
) e compilá-lo com o Turbo Pascal ou a versão GO32 do compilador FreePascal (a versão de 32 bits não funcionará porque usa a API normal do Windows):
program cd;
begin
chdir(paramstr(1));
end.
Novamente, basta executá-lo para alterar o diretório atual (por exemplo, `c.exe "c:\arquivos de programas" — sim, nomes de pastas longos funcionarão, mas serão automaticamente convertidos para nomes 8.3 após a execução).
Responder2
A ideia de um cd
comando de mudança de diretório foi inventada como parte do Unix em 1969. É conciso, como a maioria dos outros comandos do Unix, como , ls
e assim por diante. Ele também correspondia ao sistema de arquivos estruturado em árvore inventado como parte do Unix, onde até mesmo os dispositivos eram arquivos sob a extensão . É fácil esquecer que antes do Unix, não havia muitos sistemas operacionais que tivessem sistemas de arquivos estruturados em árvore com diretórios que usuários comuns pudessem criar facilmente. Normalmente, você apenas tem (na melhor das hipóteses) uma pilha de arquivos em algum lugar e utilitários estranhos da IBM como o IEBGENER para manipulá-los.rm
sed
/dev
O que cd
faz é alterar o diretório atual do processo atual, neste caso, o shell, o que afeta como o sistema operacional interpretará os nomes de arquivos relativos, ou seja, aqueles que não são totalmente qualificados na raiz /
do sistema de arquivos. O diretório atual é herdado do processo pai para o processo filho.
Existem algumas grandes diferenças na semântica entre cd
sistemas Unix ou Linux e sistemas Windows. Uma é: o que deveria cd
fazer sem operando? No Unix ou Linux, leva você ao diretório inicial. No Windows, cmd.exe
simplesmente cd
informa o diretório atual. Além disso, o Windows não tem raiz única, tem letras de unidade e você pode ter um diretório atual em cada uma, embora a implementação nos bastidores seja que a Microsoft jogou isso por cima do muro no espaço do aplicativo: cada processo carrega algum ambiente oculto variáveis com nomes estranhos assim =C:
a aplicação é responsável por manter atualizadas.
Alguns cd
comandos são melhores que outros, mas isso pode ser uma questão de gosto. OConcha Cintroduziu a ideia de CDPATH
que funciona como a PATH
variável, mas encontra diretórios em vez de executáveis. O shell C também introduziu pilhas de diretórios permitindo que você pushd
ou popd
o diretório atual. Por escritomeu próprio shell CCopiei tudo isso, adicionei uma opção para deixar o usuário decidir o que cd
fazer sem operando e um recurso que um cliente sugeriu que se você digitar mais de 2 pontos, ele cd ....
deveria subir n-1 níveis.
Responder3
Sim, cd
é um comando *nix que funciona em Linux, OSX e outros sistemas operacionais *nix.
Responder4
O cd
comando no DOS e no Windows é muito semelhante ao do Unix/Linux, e por um bom motivo: todo o conceito de diretórios foi copiado do Unix.
O primeiro sistema a rodar MS-DOS (denominado PC-DOS) foi o IBM PC. Não havia disco rígido – o armazenamento era em disquetes, com capacidades de 180K e 360K. Com uma mídia tão limitada, você não precisava de um esquema complicado de nomenclatura de arquivos. Portanto, um nome de arquivo totalmente qualificado era apenas um designador de unidade seguido por um8.3 nome do arquivocomo a:autoexec.bat
ou b:advent.exe
.
O MS-DOS 2.0 tentou lidar com muitos problemas como esse copiando recursos do Unix. Isso incluía diretórios e comandos para lidar com eles. Um problema era que o MS-DOS já usava o caractere / para indicar argumentos opcionais; é por isso que o Windows e o Unix usam caracteres separadores de caminho diferentes.
Uma diferença importante é que o Unix possui uma hierarquia de diretórios uniforme, sem designadores de unidade. Ao adaptar o cd
comando ao MS-DOS, a Microsoft teve que inventar uma nova semântica para a noção de "diretório atual" que leva em consideração o designador da unidade. Para maximizar a compatibilidade com versões anteriores (para que nomes como a:something
ainda significassem algo sensato), eles inventaram a noção de "unidade atual" e decretaram que cada unidade tivesse seu próprio "diretório atual". Então, quando você altera o "diretório atual", você está realmente alterando o diretório atual da unidade atual. Normalmente, esse tipo de detalhe não é algo com que você precise se preocupar. Mas explica por que quando você está ligado c:\somedir
e faz cd d:\otherdir
nada parece acontecer. O quetemo que aconteceu é que você alterou o diretório atual da sua d:
unidade sem alterar a unidade atual; você precisa inserir um d:
comando para que isso aconteça.