Eu estava lendo um tópico no SO: Por que as linguagens de script (por exemplo ...) não são adequadas como linguagens de shell? . Gostei especialmente da resposta de Jörg W Mittag , da qual aprendi coisas interessantes Windows PowerShell
. Portanto, depois de mais de 20 anos, o Windows finalmente possui um shell bem projetado (Windows 1.0 - 1985, versão estável do PowerShell - 2009). Por outro lado, os sistemas Unix têm várias conchas desde 1978, Bourne Shell. Eu li alguns artigos sobre entrevistas de emprego na MS e tenho uma impressão de empresa muito "nerd". Estou me perguntando por que eles não precisavam de ferramentas de linha de comando em comparação com as pessoas do Unix que fazem todo o trabalho com essas ferramentas.
19
Respostas:
O mesmo motivo que o iPod, iPhone (qualquer telefone) e o iPad não: a linha de comando não é o principal canal de interação do usuário com o computador no Windows. Está no UNIX ou GNU / Linux - é por isso que eles são mais maduros. O mesmo argumento por que os desktops da GUI do linux eram inúteis por tanto tempo em comparação com o Windows (tipo de truque do Mac OS aqui desde que eles obtiveram a linha de comando do unix meio que de graça).
fonte
Talvez eu seja simplista demais, mas penso nisso como uma coisa cultural:
fonte
Observe que não há razão para a Microsoft ser a única a escrever um shell para o Windows. Os caras que escrevem bash são diferentes dos que escrevem * nix kernels. Você nem precisa de privilégios de root. Compilei meus próprios shells para usar quando não gostei do que o sysadmin instalou. Se houvesse uma demanda real por um shell do Windows melhor, alguém teria escrito um.
fonte
Porque nunca houve pedido suficiente para um, eu acho.
O Windows Scripting Host foi instalado como padrão desde o Windows 98 (suponho que existia antes disso); VBScript era muito capaz; ou você pode facilmente escrever uma ferramenta de linha de comando, que tenha acesso a toda a API do Windows.
O PowerShell, simplificando, é apenas mais um passo na mesma direção. O COM não é mais popular; portanto, o WSH se tornou um processo de aprendizado. Mas o .NET é a grande coisa atual no mundo do Windows e aprender o PowerShell com experiência em .NET é relativamente fácil.
Um lugar que eu acho que o Powershell deu errado é tentar atrair a multidão * nix também, com todos os seus pseudônimos que fazem parecer Bash quando claramente não é.
Além das opções da linha de comando, a tubulação é muito diferente no Powershell e é realmente a primeira coisa que você deve aprender ao buscá-la.
E honestamente, é muito mais como uma linguagem de script, à la Perl, do que a shell, à la Bash. Existem algumas dicas sérias se você tentar usá-lo como seu shell principal.
Por exemplo, tente fazer um despejo SVN simples do Powershell. Ele não lida com dados binários no stdout muito bem. Por outro lado, manipular um log SVN é um sonho absoluto, graças ao seu tipo xml embutido.
fonte
Porque há pouca necessidade e muita dor no desenvolvimento de um segundo conjunto de ferramentas paralelas do Windows.
Os shells são poderosos através do número e poder dos programas auxiliares em um sistema GNU, como sed, find, xargs et al. Reimplementar essas ferramentas é muito trabalhoso, e apenas a criação de uma camada de conformidade com POSIX sobre o Windows se mostrou muito mais fácil. O Cygwin é uma camada de conformidade POSIX e fornece a maioria das necessidades que os usuários de shell têm quando são forçados a usar o Windows.
Pessoalmente, eu acho que a comunidade de desenvolvedores que não está disposta a pular a onda do POSIX e Linux e ainda se dedica o suficiente à programação de shell é tão pequena que levou 20 anos para desenvolver um shell estável.
fonte
Essa é uma daquelas perguntas que, ignorando as teorias da conspiração, provavelmente não tem uma única resposta e é o tipo de coisa que os historiadores poderiam discutir para sempre sem nunca encontrar uma resposta definitiva.
Minha impressão é que o poder da concha não é imediatamente óbvio. Comecei a programar no Windows 3.1 e havia muito pouco uso do shell. Tudo foi feito através do Visual C ++ IDE, e eu nunca olhei para makefiles e arquivos em lotes do DOS eram tão limitados que raramente tentava usar um arquivo em lotes para automatizar algo mais complicado do que um backup básico. Nenhum dos livros de programação focados no Windows (tenho boas lembranças de Petzold ) estava lendo na época discutido com o shell do Windows para qualquer coisa. Não foi até eu começar a usar e programar o Linux que eu entendi o quão útil um shell poderoso poderia ser. Lembro que quando o Windows foi lançado, foi muito emocionante porque você não precisou usar
command.com
não mais. Finalmente tivemos uma interface bonita com mais de uma fonte e vários programas em execução ao mesmo tempo, sem a necessidade de um TSR ...Eu acho que a maioria dos programadores que iniciam no Windows simplesmente não tem experiência com um shell poderoso e, portanto, não sentem uma necessidade premente de implementar um para o Windows. Os programadores que trabalham no Linux e apreciam o shell preferem trabalhar no Linux e, portanto, não se sentem inclinados a passar o tempo trabalhando em um ambiente em que não se sentem tão à vontade para implementar um para o Windows, especialmente considerando (como foi indicado em outra pergunta) a necessidade de implementar também todas as ferramentas CLI necessárias junto com o próprio shell.
A crescente popularidade do Linux é, provavelmente, a principal razão pela qual a Microsoft finalmente colocou um shell adequado. À medida que mais e mais pessoas percebiam o que um shell é útil, ficava cada vez mais claro que o Windows estava perdendo uma ferramenta importante.
fonte
Se você considera os shells do Unix "decentes", existe pelo menos um shell para o Windows que é "decente" há décadas. O shell Hamilton C é razoavelmente próximo ao shell Unix C (embora observe que o shell C nunca teve uma penetração de mercado particularmente grande no Unix). Muitas pessoas também usam os vários shells do JPSoft (4DOS, 4NT, agora chamado Take Command) há algum tempo - como você provavelmente pode imaginar pelo nome, o 4DOS remonta aos dias do MS-DOS.
Se você insistir em um shell distribuído pela Microsoft, há 15 anos, o kit de recursos do Windows NT costumava incluir uma porta NT do shell 1 do PD Korn , juntamente com um número razoável de utilitários Unix-ish. Provavelmente não incluiu o suficiente para executar muitos scripts de shell sem modificação, mas foi suficiente para lidar com uma quantidade razoável de uso, especialmente com bastante trabalho interativo.
1 Com toda a honestidade, eu não sei se era uma porta desse shell exato, ou apenas algo bastante semelhante - usei o suficiente para verificar se era tão irritante quanto me lembrava de ser o shell do Unix e o deixei por isso .
fonte
:)
O Windows possui recursos de design que não se prestam a scripts. Isso é resultado de tornar a interface gráfica o principal modo de operação. Muitas ferramentas não possuem interfaces funcionais de linha de comando. Sem uma interface de linha de comando decente, é muito difícil gerar um bom shell.
Geralmente, as coisas que precisam ser scripts no Windows exigem que cliques do mouse e pressionamentos de tecla sejam simulados em vários locais da janela de aplicativos. Os scripts resultantes podem ser bastante frágeis. Descrever onde script em uma linguagem de comando não é um exercício trivial, pois a geometria relevante não está prontamente disponível.
O Windows também não tinha um mecanismo de tubulação funcional nas versões anteriores. Como foi descrito, o primeiro processo seria executado e sua saída seria salva em um arquivo temporário. Esse arquivo seria usado como entrada para o próximo comando. Isso poderia exigir muito disco e falharia se não houvesse espaço temporário suficiente. Os pipes Unix transmitem os dados na memória e agendam os processos de maneira a minimizar os atrasos.
fonte
Quando foi lançado, em 1993, o Windows NT foi uma mudança da MS para o espaço anteriormente ocupado pelos servidores Unix e, na época, houve um grande acordo sobre a compatibilidade e portabilidade do POSIX. Mas ele não fez bem o trabalho - em vez disso, seus usuários eram mais o público de desktops que usavam um hardware melhor (esses eram os dias em que um 486dx 50MHz com 32MB de RAM estava próximo do fim) e queriam um sistema operacional melhor. Mas eles não estavam interessados em conchas, então tudo escorregou. Na época do Windows Server 2000, que foi uma segunda tentativa séria de quebrar esse mercado, acho que a MS havia percebido que eles eram fracos do lado do shell - como os administradores adoram scripts de shell -, mas mesmo assim demorou algum tempo para coçar o coceira.
fonte