Відповіді:
Я серйозно сумніваюся в цьому. Саме тому, що це так нудно робити, або точніше через причину, чому це нудно: системи, не кажучи вже про програмне забезпечення, зовсім інші.
Справа не лише в тому, щоб додати чи видалити #!
рядок у верхній частині. Візьміть цей рядок із написаного сценарію оболонки:
STREAM_FROM=$($ZFS list -t snapshot ${BACKUP_TARGET_FS} -H -o name -r | grep '@backup_' | tail -n 1 | cut -d '@' -f 2)
(Так, мабуть, є більш ефективний спосіб зробити це, ніж жменька труб, але це вже не в цьому; сценарій, про який йдеться, не потребує найвищої продуктивності.) Це присвоєння змінної, розширення вираження підрозділу, виклик команд шляхом змінна середовища розширення, змінна середовища розширення, трубопроводи, grep
, tail
і cut
все в одній особі заяву. Для того, щоб точно перетворити навіть це одне твердження, потрібно знати, як все це працює і точну семантику різних опцій до викликаних стандартних утиліт та як відтворити таку поведінку в цільовій системі.
Припустимо, у вас в обох системах встановлені утиліти ZFS (тому нам не потрібно турбуватися про цю частину). Як ви збираєтеся автоматично перетворювати це в операційний пакетний файл Windows або набір операторів? Я заперечую, що якщо ви не можете зробити щось подібне до вирішення проблеми зупинки , неможливо написати загальний перетворювач, такий як той, який ви чітко шукаєте. На відміну від перекладу на природну мову, поведінка комп'ютерних програм "близьке" до оригіналу просто ніде не є досить хорошим: все, що не досконалості, - це помилка.
Або взяти роботу з сканування, яку я зробив на днях (правда, це не сценарій, але це так само легко могло бути; я просто закінчила вводити його в термінал, оскільки це була разова штука); Я закінчився чимось не на відміну від наступного:
for n in $(seq 10 66); do scanimage --button-controlled=yes -x 180 -y 200 --mode Gray --format=tiff > scan${n}.tmp && convert scan${n}.tmp scan${n}.png && \rm scan${n}.tmp; done
Це складний приклад , оскільки --button керований параметр забезпечується бекенда , а НЕ scanimage
(SANE) сам. Таким чином, інструмент для перетворення цього одноклапника повинен знати про всі варіанти, що надаються кожним сервером SANE та їх аналогами в цільовій системі; явно не здійсненна, а може бути, навіть неможлива .
Навіть по-справжньому простий скрипт оболонки, який лише повторює набір файлів, навряд чи зможе автоматично перетворити. А таких простих сценаріїв мало і далеко між ними.
Крім того, "скрипти оболонки" не є чимось однорідним: те, що потрібно для перетворення сценарію оболонки bash, відрізняється від того, що потрібно для перетворення скрипту оболонки zsh, відрізняється від необхідного для перетворення сценарію оболонки, написаного в Perl. У багатьох випадках можуть навіть не існувати прямі аналоги різним синтаксисам, що ще більше ускладнює переклад.