Завдання : написати єдиний файл сценарію, foo.cmdякий можна викликати у ванільній cmd.exeпідказці Windows (не PowerShell, не в режимі адміністратора), щоб виконати довільний код для Windows ...
> .\foo.cmd
Hello Windows!
... але також виклик без змін із типової підказки bash, сумісної з POSIX (Linux / OSX) оболонки ( tcsh, або zsh), для виконання довільного коду, специфічного для POSIX:
$ chmod a+x foo.cmd
$ ./foo.cmd
Hello POSIX!
... не вимагаючи встановлення чи створення сторонніх перекладачів / інструментів.
Я знаю, що це можливо, але з суворими (тобто в Windows, один або два рядки сміття / повідомлення про помилку друкуються до stderr або stdout перед "Привіт Windows!").
Критерієм виграшу є мінімізація (першої) кількості чітких ліній та (друга) кількості символів.
Cruft може бути визначений як будь-який консольний вихід (stdout або stderr), який не виробляється (довільним) кодом корисного навантаження. Порожні рядки зараховуються до числа ліній. Нові рядки не зараховуються до числа символів. Чіткі результати слід підсумовувати на обох платформах. Давайте ігноруємо подібні механізми, clsякі змітають крихту, але ціною також вимикання попереднього термінального виходу. Якщо Windows повторює ваші команди, оскільки ви ще не звернулися @echo off, давайте виключимо символи, які він витрачає, надрукуючи поточний каталог та підказку.
Вторинним критерієм є простота / вишуканість рішення всередині foo.cmd: якщо "інфраструктура" визначена як будь-який символ, який безпосередньо не бере участь у довільному коді корисного навантаження, то мінімізуйте спочатку кількість рядків, що містять символи інфраструктури, а друге загальну кількість інфраструктури символів.
Додаткові куди, якщо частина POSIX буде працювати, незважаючи на файл, що має рядки CRLF! (Я не впевнений, що остання частина навіть можлива.)
Моє існуюче рішення, яке я опублікую тут, коли інші зможуть, використовує 6 рядків інфраструктурного коду (52 символи без урахування нових рядків). Він створює 5 ліній суворості, дві з яких є порожніми, всі вони зустрічаються у Windows (30 символів, виключаючи нові рядки та виключаючи поточний рядок / рядок підказок, який з’являється у двох із цих рядків).