LINUX.ORG.RU

Lua Shell

 , , ,


2

6

Контест этого топика: Леннарт теперь до эмуляторов терминала добрался (комментарий)

@EXL:

Лучше бы Lennart взялся за Bash.

@wandrien:

Там только выкинуть целиком. Я вот хочу попытаться для lua сделать обвязку для скриптинга уровня оболочки. Подобные либы на Lua есть, но качество и объем фич мне не нравится. Надо лучше. Тебе бы был интересен такой проект?


Итак, вот моя идея в общих чертах. Составные части, на которых основываться:

https://github.com/BanceDev/lush
Низкое качество сборочного скрипта. Вероятно, и кода тоже. Интересует идея в первую очередь.

https://github.com/mna/luashell
Ключевое, что нам нужно. Взять за основу. Но:

  • Нужны полнофункциональные средства перенаправления ввода-вывода, заменить эту часть API. Под капотом, вероятно. придётся делать полноценную обработку fork - настройка процесса - exec.
  • test() должен быть вменяемый, а не парсить строку по пробелам. Просто алиас для sh.cmd("test", ...).exec()
  • Форк процесса без exec в качестве элемента пайплайна на уровне API
  • Как расширение предыдущего - обёртка а ля sh.echo("text").

В качестве базового API взять https://25thandclement.com/~william/projects/lunix.html вместо https://github.com/luaposix/luaposix

Также рассмотреть для включения и/или как источник идей:


Общая идея:

  • Lua + lunix — получаем возможность писать на Луа «приложения как на Си под libc».
  • Сверху на это - форкнутый и допиленный luashell. Это ключевое.
  • Далее QoL вещи: lua-path, argparse, функции для парсинга и форматирвоания времени, функции для JSON.
  • Далее - разработать интерактивный режим для использования в качестве командной оболочки.

Продукт компилируется в статический бинарь с musl и/или cosmopolitan libc и получаем «вечный» shell. При этом весьма компактный.

★★★

Последнее исправление: wandrien (всего исправлений: 4)

Низкое качество сборочного скрипта.

Слепой я сначала прочитал «Новое качество сборочного скрипта». Порадовался за грамотный пиар и маркетинг :)

hobbit ★★★★★
()
Ответ на: комментарий от wandrien

А почему не сделать что-то вроде:

-- вводим два контекста - команды и оболочки, \
-- первые копят цепочку, второй исполняет, 
-- метатабличками перегружаем `_G`, и контексты до 
-- получения следующего синтаксиса:

ls{ "-la" } | grep { "lua" } | wc { "-l"} | shell {}

cat { in = "/etc/passwd" } | sort { out = "sorted.txt"} | shell {}

Вроде же симпатичнее и больше на обычный bash похоже(чтобы проще было примеры переписывать). То что вы показали больше как по мне похоже на эдакое расширение io.pipe()/os.execute(), который тогда уж проще расширить аналогом луашных регулярок, чем приведённый функциональный стиль использовать с кучей избыточных кавычек. Если же тюнить ваш пример, то как минимум лучше вытянуть stdin/stdout как нарушителей контейнера и вместо аргументов функций использовать таблицы, в которых и переопределять stdin/stdout

AKonia ★★★
()
Последнее исправление: AKonia (всего исправлений: 3)
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.