Tantangan : menulis file skrip tunggal foo.cmd
yang dapat dipanggil dari cmd.exe
prompt vanilla Windows (bukan PowerShell, bukan dalam mode administrator), untuk mengeksekusi kode khusus Windows sewenang-wenang ...
> .\foo.cmd
Hello Windows!
... tetapi juga akan dipanggil berubah dari khas POSIX-compliant (Linux / OSX) shell prompt ( bash
, tcsh
, atau zsh
), untuk mengeksekusi sewenang-wenang kode POSIX-spesifik:
$ chmod a+x foo.cmd
$ ./foo.cmd
Hello POSIX!
... tanpa memerlukan instalasi atau pembuatan juru bahasa / alat pihak ketiga.
Saya tahu ini mungkin, tetapi dengan cruft (yaitu pada Windows, satu atau dua baris sampah / pesan kesalahan dicetak ke stderr atau stdout sebelum "Hello Windows!").
Kriteria yang menang adalah minimalisasi (pertama) jumlah baris cruft, dan (kedua) jumlah karakter cruft.
Cruft dapat didefinisikan sebagai output konsol (stdout atau stderr) yang tidak diproduksi oleh kode muatan (sewenang-wenang). Baris kosong dihitung dalam jumlah baris. Baris baru tidak dihitung dalam jumlah karakter. Skor Cruft harus dijumlahkan di kedua platform. Mari kita abaikan mekanisme seperti cls
itu menyapu cruft tetapi dengan mengorbankan juga keluaran terminal sebelumnya. Jika Windows menggemakan perintah Anda karena Anda belum mengaktifkannya @echo off
, mari kita kecualikan karakter yang dihabiskannya dalam mencetak direktori saat ini dan meminta.
Kriteria sekunder adalah kesederhanaan / keanggunan solusi di dalamnya foo.cmd
: jika "infrastruktur" didefinisikan sebagai karakter apa pun yang tidak terlibat langsung dalam kode muatan sewenang-wenang, maka minimalkan terlebih dahulu jumlah baris yang berisi karakter infrastruktur, dan kedua jumlah total infrastruktur karakter.
Kudos ekstra jika bagian POSIX akan berfungsi meskipun file memiliki akhiran CRLF! (Tidak yakin bahwa bagian terakhir bahkan mungkin.)
Solusi saya yang ada, yang akan saya posting di sini setelah orang lain memiliki kesempatan, menggunakan 6 baris kode infrastruktur (52 karakter termasuk baris baru). Ini menghasilkan 5 baris cruft, dua di antaranya kosong, yang semuanya terjadi pada Windows (30 karakter tidak termasuk baris baru dan tidak termasuk direktori saat ini / string prompt yang muncul pada dua baris tersebut).