Справочное руководство по языку Lua 5.1 :: 6 -
6 – Автономная Lua
Несмотря на то, что язык Lua был has разработан в качестве языка-расширения, для включения в программы-хозяева, написанные на C, он также зачастую используется как автономный язык. Интерпретатор Lua для автономного выполнения программ называется lua, и включен в стандартный пакет поставки. Автономный интерпретатор включает все стандартные библиотеки, в том числе библиотеку отладки.
Параметры запуска интерпретатора:
lua [options] [script [args]]
Опции (options) могут быть следующими:
- -e stat: выполняет строку stat;
- -l mod: "требует" mod;
- -i: переходит в интерактивный режим после запуска script;
- -v: выводит информацию о версии;
- --: останавливает обработку опций (примечание: похоже, что просто-напросто игнорирует остальные опции);
- -: использует stdin вместо файла и останавливает обработку опция.
После обработки опций, lua выполняет заданный скрипт script, передавая ему аргументы args как строковые. При вызове без аргументов, lua работает аналогично «lua -v –i» когда стандартным поток ввода (stdin) – терминал, и как «lua» - в противном случае.
Перед обработкой аргументов, интепретатор проверяет, выставлена ли переменная окружения LUA_INIT. Если ее формат @filename, то lua запускает файл. В противном случае, lua выполняет команду, записанную в переменной.
Все опции обрабатываются в рпямом порядке, за исключением опции -i. Например, следующий вызов
$ lua -e'a=1' -e 'print(a)' script.lua
Приведет к тому, что интерпретатор сначала изменит значение a на 1, затем выведет значение переменной a ('1'), и после этого запустит файл script.lua без аргументов. (В данном случае $ – приглашение командной строки (терминала). Ваше приглашение командной строки может отличаться.)
Перед началом выполнения скрипта, lua собирает все аргументы командной строки в глобальную таблицу arg. Имя скрипта сохранено по индексу 0, первый аргумент после имени скрипта – по индексу 1, и т.д. Все аргументы перед именем скрипта (т.е., имя интерпретатора и его опции) сохраняются с отрицательными индексами. Например, при вызовеl
$ lua -la b.lua t1 t2
Интерпретатор сначала запускает файл a.lua, затем создает таблицу
arg = { [-2] = 'lua', [-1] = '-la',
[0] = 'b.lua',
[1] = 't1', [2] = 't2' }
И, наконец, запускает файл b.lua. Скрипт вызывается с аргументами arg[1], arg[2], ···; он может также получить доступ к этим аргументам при помощи выражения обработки переменного количества аргументов (vararg expression) '...'.
В интерактивном режиме, если вы вводите неполное выражение, интерпретатор ожидает его завершения и предоставляет новое поле для ввода.
Если глобальная переменная _PROMPT содержит строку, то ее значение используется в качестве строки запроса. Аналогично, если глобальная переменная _PROMPT2 содержит строку, ее значение используется в качестве «вторичной» строки запроса (используемой при вводе неполных выражений). Поэтому, обе строки запроса могут быть изменены непосредственно из командной строки.
Пример:
$ lua -e'_PROMPT='myprompt> '' -i
(внешняя пара кавычек необходима шеллу, внутренняя – Lua). Также строки запроса могут быть изменены в любой программе Lua присваиванием переменной _PROMPT. Обратите внимание на использование -i для перехода в интерактивный режим; в противном случае, программ закончит выполнение сразу после выполнения оператора присваивания переменной _PROMPT.
Для представления возможности использовать Lua в качестве интерпретатора скриптов в Unix системах, автономный интерпретаор пропускает первую строку chunk если он начинается с#. Т.о., скрипты Lua могут быть превращены в исполняемые программы вызовом chmod +x и добавлением #! в начало файла, как показано в следующем примере:
#!/usr/local/bin/lua
(Конечно, местоположение интерапретатора Lua может изменяться. Т.о. если lua находится в каталоге, указанном в переменной окружения PATH, то
#!/usr/bin/env lua
будет лучшим и более переносимым решением.)