От последовательности к рабочему процессу: пусть `.lil` принимает решения
Линейный сценарий идеален, пока ответ всегда один: «сделай A, потом B, потом C». Как только нужно проверить наличие каталога, повторно использовать путь, сохранить результат или остановиться с понятной причиной, перед вами уже рабочий процесс с логикой, а не простой список.
Используйте самый маленький язык автоматизации, который решает задачу
Файл с #lil относится к простому линейному механизму Core: обычные команды выполняются по порядку, и эта простота — достоинство. Он идеален для установочных списков, повторяемой диагностики и коротких процедур.
install runhelp runПеременные дают повторяющимся значениям понятные имена
set root lil-playground задаёт пути понятное имя. Дальше $root, $source и $archive объясняют назначение значений и избавляют от необходимости менять один и тот же текст в пяти местах.
Хорошие имена переменных делают сценарий переносимым. Значения, зависящие от окружения, держите ближе к началу, секреты — снаружи, а несколько ясных переменных почти всегда лучше хитрой сборки строк.
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zipУсловие проверяет предположение до действия
if dir "$source" — не украшение: проверка не даёт шагу архивации молча работать не с той целью. Условия особенно полезны там, где неверное предположение иначе привело бы к разрушительному или непонятному сбою.
exists, file, empty, eq, ne, ok, fail, command и инверсию через not. Делайте ветки достаточно короткими, чтобы читатель всё ещё понимал, зачем существует каждый путь.
if dir "$source"
stat "$source"
else
stop "Project directory is missing"
endСохраняйте результат только тогда, когда он нужен дальше
capture name <cmd> выполняет обычную команду lil-terminal и сохраняет её текстовый результат в переменную. Встроенные $last, $status, $cwd и $line дают доступ к основному состоянию выполнения.
Не сохраняйте каждый вывод в переменную только потому, что это возможно. Текстовый результат удобен, когда он невелик и стабилен; структурированные файлы или специализированные команды форматов лучше подходят для данных, которые должны передаваться между инструментами и сохраняться надолго.
capture current pwd -s
if empty "$current"
stop "Current directory is unavailable"
endРешите заранее, что означает ошибка
По умолчанию stop позволяет завершить сценарий с понятной причиной.
Незнакомые сценарии сначала запускайте с -n: проверочный режим показывает команды, но не выполняет их. Затем -v может показать полный вывод реального запуска. Предварительный просмотр — не бюрократия, а способ оставить автоматизацию понятной.
run workflow.lil -nrun workflow.lil -vДелите большие сценарии по ответственности, а не по количеству строк
Сценарий может вызвать
.lil не является шифрованием: он защищает формат и целостность от случайного редактирования, но не обеспечивает конфиденциальность и не подтверждает авторство.
run -p workflow.lil workflow.packed.lilrun workflow.packed.lilУ автоматизации намеренно меньше полномочий, чем у человека в интерактивном терминале
Интерактивные команды интерфейса в обычных сценариях блокируются, а неинтерактивные команды с повышенными возможностями вроде @command внутри
Это ограничение сделано специально. Воспроизводимый сценарий должен объявлять зависимости от модулей до запуска и не должен неожиданно устанавливать код, запрашивать секрет или уничтожать терминал посреди выполнения.
Сохраните это как сценарий
Сохраните это как workflow.lil, при желании создайте lil-playground/project для успешной ветки и первым делом выполните
set root lil-playground
set source lil-playground/project
set archive lil-playground/project.zip
if not dir "$root"
stop "lil-playground is missing"
end
if dir "$source"
capture current pwd -s
zip "$source" "$archive" -f
stat "$archive"
else
stop "Project directory is missing"
end