Executando um shell CygWin: quais comandos do console do Windows (DOS) desaparecem?

1

Se sob o meu Windows com CygWin (v2.831 32bits) eu faço:

cmd
mode 80,50

a largura da tela muda, mas se eu abrir um terminal CygWin, como o bash:

C:\cygwin\bin\bash --login -i
$ mode 80,50
bash: mode: command not found

Então eu suponho que o comando "mode" não exista mais. Contanto que muitos outros comandos continuem existindo, como:

$ getmac
Dirección física    Nombre de transporte
=================== ==========================================================
08-00-27-37-19-63   \Device\Tcpip_{8B079C63-6C1A-4D39-AF22-6F692B0188EB}

(Meu Windows está em espanhol, desculpe)
Eu estava me perguntando que outros comandos (ou talvez dispositivos, mas não como o NUL, que concretamente continuam existindo) desaparecem?

EDIT: Para os googlers que chegam aqui em busca do problema "mais" , ele é incluído no pacote util-linux do CygWin.

    
por Sopalajo de Arrierez 02.03.2014 / 17:35

1 resposta

2

Não, o comando 'mode' não "desaparece" e você ainda pode invocá-lo como 'mode.com'. O que acontece é que a versão do bash do Cygwin está anexando ".exe" a um nome possivelmente executável no prompt quando faz um loop na busca de arquivos nos diretórios PATH. No entanto, o clássico Windows cmd.exe anexa ".exe" e ".com" (".bat" e ".cmd" também) no mesmo processo.

C:\Windows\System32>where mode
C:\Windows\System32\mode.com

Para responder à segunda pergunta, procurei o caminho do cygwin para o mode.com do Windows:

$ which mode.com
/cygdrive/c/Windows/system32/mode.com

e obteve uma lista de executáveis * .com no mesmo diretório.

$ ls -l /cygdrive/c/Windows/system32/*.com

Ao observar os resultados, podemos dizer que pelo menos os seguintes comandos "desaparecem" no bash: chcp.com, diskcomp.com, diskcopy.com, format.com, mode.com, more.com, tree.com.

ATUALIZAÇÃO 2014-03-05 16:45 GMT + 0100 : Considerando que o CMD.EXE autocomplete todos os arquivos no PATH com uma extensão da lista PATHEXT, o bash autocomplete todos os arquivos no PATH, que são executáveis, independentemente da sua extensão.

Se eu digitar 'forma' e pressionar TAB, ele será automaticamente preenchido automaticamente para 'format.com'. No entanto, se eu digitar 'mode' e pressionar TAB uma vez, apenas um bipe será produzido; Se eu pressionar TAB mais uma vez, uma escolha entre 'mode.com' e 'modemui.dll' é apresentada. Depois de um pouco mais de testes, acho que há um bug com a conclusão do bash do Cygwin, que resulta em um bipe sendo produzido na primeira pressionada de TAB em vez de uma opção sendo impressa. Isso é independente da extensão.

Outra questão é que eu posso digitar 'notepad' ou 'notepad.exe' e o cygwin descobre que tem que executar /cygdrive/c/Windows/system32/notepad.exe. Ao mesmo tempo, se eu quiser executar o 'foobar.bat' ou 'foobar.com', eu preciso fornecer uma extensão. Parece que o Cygwin tem um tratamento especial do sufixo '.exe', que é realmente o caso (veja talvez_suffix funcione e stat_suffixes array). Além disso, parece que '.bat', '.com' e '.cmd' foram removidos propositalmente em versão 1.214 do spawn.cc e não foram adicionados novamente em uma atualização mais recente .

Sinta-se à vontade para perguntar sobre o primeiro problema na lista de discussão do cygwin e sobre o segundo problema nos desenvolvedores do cygwin. Eu não estou realmente envolvido no Cygwin, mas é assim que você pode contribuir para isso! :-) Além disso, para corrigir a minha resposta à sua pergunta inicial: todos os executáveis do Windows com extensões da lista PATHEXT, exceto .EXE desaparecer:

C:\Windows\System32>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    
por 02.03.2014 / 19:19