Оболонки файлів (* .sh) для перетворення пакетного файлу (* .bat)?


0

Перетворювати сценарії оболонки в пакетні файли тихо. Чи є спосіб автоматично і легко виконати перетворення .sh в .bat або навпаки?

Відповіді:


5

Я серйозно сумніваюся в цьому. Саме тому, що це так нудно робити, або точніше через причину, чому це нудно: системи, не кажучи вже про програмне забезпечення, зовсім інші.

Справа не лише в тому, щоб додати чи видалити #!рядок у верхній частині. Візьміть цей рядок із написаного сценарію оболонки:

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. У багатьох випадках можуть навіть не існувати прямі аналоги різним синтаксисам, що ще більше ускладнює переклад.


Велике спасибі Майклу Кьорлінгу. Ваша відповідь справді найбільше висвітлює.
стек

1
Тільки тому, що ти не можеш щось зробити в повній загальності, не означає, що ти взагалі не можеш це зробити.
asmeurer

@asmeurer Погодьтеся з вами з цього питання, напевно, ще немає доступного програмного забезпечення чи технології, яка б вирішила цю ситуацію.
стек

1
@asmeurer ОП не запитувала про конкретний випадок, тому єдиним розумним (для мене) способом тлумачення питання було означати загальну справу. Якщо ви відчуваєте, що маєте кращу відповідь, будь-ласка, опублікуйте це. Що питання старе, не має значення; насправді, саме про це значки Відродження та Некроманта .
CVn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.