O comando do console é um caractere curinga? [fechadas]

1

Eu queria saber ao desenvolver algum aplicativo (embora isso não seja uma questão de desenvolvimento) se o comando cd usado no Windows for um tipo de comando curinga ou entre plataformas. Eu olhei para cima na mesa com comandos para Unix / Linux e MAC OS X e acontece que parece estar lá. Eu não sou um usuário multi-so, então eu pergunto se alguém com experiência em diferentes sistemas operacionais pode me dizer:

  1. Se esse comando realmente existir e funcionar
  2. Se tiver a mesma funcionalidade (alterar diretório)
  3. Se houver algum problema com seu uso
  4. Se em qualquer sistema operacional houver outro comando de linha de comando que faça o mesmo de uma maneira melhor / mais elaborada / mais usada de maneira mais frequente.

Obrigado antecipadamente!

(P.S.Eu não tenho 100% de certeza se esta pergunta pertence a este site ou a algum outro site stackexchange ...)

(P.P.S Qualquer ajuda na marcação disso será apreciada!)

    
por Angelos Chalaris 30.09.2012 / 19:44

5 respostas

1

If this command really exists and works

Hum, sim, existe e funciona.

If it has the same functionality (change directory)

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 incorporado ao shell e altera o diretório atual.

If there are any problems with its use

Que tipo de problemas? Além de . e .. , sua sintaxe é bastante direta. A única complicação é ao alterar o diretório atual em outros volumes (letras de unidade). Além disso, as extensões de comando no Windows estendem seu uso ligeiramente, mas nada que possa causar problemas reais.

If in any OS there is another command-line command that does the same in a better/more elaborate/more frequetly used way.

Não realmente. Pode haver outros comandos, mas cd é bom e curto e faz o truque. 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 pode ser melhorada?

Isso não é exatamente no tópico (embora esteja relacionado), mas aparentemente algumas pessoas não parecem aceitar que o comando CD não tenha para ser embutido no shell . O fato é que não não ; pode ser um programa externo. Alguns sistemas operacionais facilitam, outros dificultam, e alguns podem até torná-lo impossível, mas o fato é que pode ser externo e não sempre ter que ser construído em cmd , não apenas em 'comando'. (Ele não funcionará nas versões de 64 bits do Windows porque eles diminuíram bastante a compatibilidade com versões anteriores.)

Por exemplo, você pode salvar o script de depuração abaixo como c.scr e compilá-lo executando debug < c.scr na linha de comando. Ele criará um arquivo .com 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

(Note, ele não suporta nomes extensos de arquivos, então você precisará usar a versão 8.3 . o drive atual também, então você pode mudar o diretório para outro drive em um único movimento, mas ele faz isso de uma maneira muito simples e não faz nenhuma verificação de erros, então tenta mudar para um diretório que começa com uma letra para Ou seja, c c:\windows funcionará como c \windows , mas c asd não funcionará se você tiver uma unidade A: , a menos que contenha um diretório chamado asd . estendê-lo e adicionar verificação de erros e tal, se quiser, mas prova meu ponto 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 ele usa a API normal do Windows ):

program cd;
begin
  chdir(paramstr(1));
end.

Mais uma vez, 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 convertidos automaticamente em nomes 8.3 após a execução).

    
por 30.09.2012 / 21:41
5

A idéia de um comando de diretório cd change foi inventada como parte do Unix em 1969. É concisa, como a maioria dos outros comandos Unix como ls , rm , sed e assim por diante. Ele também combinava com o sistema de arquivos estruturado em árvore inventado como parte do Unix, onde até os dispositivos eram arquivos em /dev . É fácil esquecer que, antes do Unix, não havia muitos SOs que tivessem sistemas de arquivos estruturados em árvore com diretórios que usuários comuns poderiam criar facilmente. Normalmente, você tem (na melhor das hipóteses) uma pilha de arquivos em algum lugar e estranhos utilitários da IBM como o IEBGENER para manipulá-lo.

O que cd faz é alterar o diretório atual do processo atual, neste caso, o shell, que afeta como o sistema operacional interpretará os nomes de arquivos relativos, ou seja, aqueles que não são totalmente qualificados a partir da raiz / do sistema de arquivos. O diretório atual é herdado do processo pai para filho.

Existem algumas grandes diferenças na semântica de cd em sistemas Unix ou Linux versus sistemas Windows. Uma é, o que deve cd sem operando fazer? No Unix ou Linux, você leva para o diretório inicial. No Windows, cmd.exe ' cd simplesmente relata 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 um, embora a implementação nos bastidores seja que a Microsoft jogou tudo no espaço do aplicativo: Cada processo carrega algum ambiente oculto variáveis com nomes estranhos como =C: que o aplicativo é responsável por manter atualizado.

Alguns comandos cd são melhores que outros, mas isso pode ser uma questão de gosto. O shell C introduziu a ideia de CDPATH que funciona como a variável PATH , mas encontra diretórios em vez de executáveis. O shell C também introduziu pilhas de diretório permitindo que você pushd ou popd do diretório atual. Ao escrever meu próprio shell C eu copiei tudo isso, adicionei uma opção para deixar o usuário decidir o que cd sem operando deveria fazer e um recurso que um cliente sugeriu que, se você digitar mais de dois pontos, como em cd .... , ele deve subir para níveis n-1.

    
por 30.09.2012 / 20:06
2

Sim, cd é um comando * nix que funciona no Linux, OSX e nos outros sistemas operacionais * nix.

    
por 30.09.2012 / 19:50
1

Apenas uma curiosidade: AFAIR, no Novell DOS (há alguns anos) cd . permaneceu no diretório atual, cd .. foi para o diretório pai, cd ... subiu dois níveis na hierarquia, cd .... três níveis e assim por diante.

    
por 30.09.2012 / 21:28
1

O comando cd no DOS e no Windows é muito semelhante ao do Unix / Linux, e com um bom motivo: todo o conceito de diretórios foi copiado do Unix.

O primeiro sistema a executar o MS-DOS (com a marca PC-DOS) foi o IBM PC. Não havia disco rígido - o armazenamento estava em disquetes, que vinham nas capacidades de 180K e 360K. Com essa mídia limitada, você não precisava de um esquema complicado de nomeação de arquivos. Portanto, um nome de arquivo totalmente qualificado era apenas um designador de unidade seguido por um 8.3 nome_do_arquivo como a:autoexec.bat ou b:advent.exe .

O MS-DOS 2.0 tentou lidar com vários problemas como esse, copiando recursos do Unix. Isso incluía diretórios e os comandos para lidar com eles. Um problema era que o MS-DOS já estava usando o caractere / para indicar argumentos opcionais; é por isso que o Windows e o Unix usam diferentes caracteres separadores de caminho.

Uma diferença importante é que o Unix tem uma hierarquia de diretórios uniforme, sem designadores de unidade. Ao adaptar o comando cd para o MS-DOS, a Microsoft precisou inventar uma nova semântica para a noção de "diretório atual" que leva o designador de unidade em consideração. Para maximizar a compatibilidade com versões anteriores (para que nomes como a:something ainda significariam algo sensato), eles inventaram a noção de "unidade atual" e decretaram que cada unidade tenha seu próprio "diretório atual". Então, quando você está mudando o "diretório atual", você está realmente mudando o diretório atual para a unidade atual. Geralmente esse tipo de detalhe não é algo que você tem que se preocupar. Mas isso explica porque quando você está em c:\somedir e você faz cd d:\otherdir nada parece acontecer. O que aconteceu é que você alterou o diretório atual para a sua unidade d: sem alterar sua unidade atual; você precisa inserir um comando d: para que isso aconteça.

    
por 30.09.2012 / 22:38