Desafio : escreva um único arquivo de script foo.cmd
que possa ser chamado no cmd.exe
prompt do Windows, baunilha (não no PowerShell, não no modo administrador), para executar códigos arbitrários específicos do Windows ...
> .\foo.cmd
Hello Windows!
... mas também ser invocado inalterado de um típico compatível com POSIX (Linux / OSX) janela de comandos ( bash
, tcsh
ou zsh
), para executar arbitrária código específico do POSIX:
$ chmod a+x foo.cmd
$ ./foo.cmd
Hello POSIX!
... sem a necessidade de instalação ou criação de intérpretes / ferramentas de terceiros.
Eu sei que isso é possível, mas com cruft (ou seja, no Windows, uma ou duas linhas de lixo / mensagem de erro são impressas em stderr ou stdout antes de "Hello Windows!").
O critério vencedor é a minimização (primeiro) do número de linhas de cruft e (segundo) do número de caracteres de cruft.
Cruft pode ser definido como qualquer saída do console (stdout ou stderr) que não seja produzida pelo código de carga útil (arbitrária). As linhas em branco são contadas na contagem de linhas. Novas linhas não são contadas na contagem de caracteres. As pontuações de cruft devem ser somadas nas duas plataformas. Vamos desconsiderar mecanismos como cls
esse que varrem a crosta, mas com o custo de também anular a saída anterior do terminal. Se o Windows repetir seus comandos porque você ainda não ativou @echo off
, vamos excluir os caracteres que ele gasta na impressão do diretório e prompt atuais.
Um critério secundário é a simplicidade / elegância da solução interna foo.cmd
: se "infraestrutura" for definida como qualquer caractere não diretamente envolvido no código de carga arbitrária, minimize primeiro o número de linhas que contêm caracteres de infraestrutura e depois o número total de infraestrutura personagens.
Parabéns extra se a parte do POSIX funcionar apesar do arquivo ter terminações de linha CRLF! (Não tenho certeza de que a última parte seja possível.)
Minha solução existente, que postarei aqui depois que outros tiverem chance, usa 6 linhas de código de infraestrutura (52 caracteres, excluindo novas linhas). Ele produz 5 linhas de cruft, duas das quais estão em branco, todas ocorrendo no Windows (30 caracteres excluindo novas linhas e excluindo a cadeia de diretório / prompt atual que aparece em duas dessas linhas).