Install
$ yum install lua
$ sudo apt install lua5.3
/usr/bin/lua
/usr/bin/luac
$ lua -v
$ lua
print(1+1)
$ ldd /usr/local/bin/lua
linux-vdso.so.1 (0x00007fff2eb34000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f83d3087000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f83d2e5e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f83d31b9000)
https://www.lua.org/ftp/lua-5.4.7.tar.gz
yum install @development
yum install readline-devel ncurses-devel
sudo apt install build-essential cpp make binutils
$ make linux
$ make test
$ make install
// make install local
// make install INSTALL_TOP=/opt/lua
make
make install 安装到 /usr/local
make install local 安装到 ./install
编译结果 /usr/local/{bin,include,lib,man}
TO_BIN= lua luac
TO_INC= lua.h luaconf.h lualib.h lauxlib.h lua.hpp
TO_LIB= liblua.a
TO_MAN= lua.1 luac.1
==== 静态编译 (alma报错, arch成功)
$ vim src/Makefile
MYLDFLAGS=-static
Lua 语法
区分大小写
执行系统命令
Lua有两种执行系统命令的方法:os.execute, io.popen
os.execute 返回的是命令执行的状态,一共返回3个值。
第一个值是true或nil, true表示命令成功执行完,否则返回nil。
第二个值是exit时,表示正常终止,第三个值表示退出的状态码。
第二个值是signal时,表示信号终止,第三个值表示终止的信号。
> os.execute("pwd")
true exit 0
> os.execute("pwdx")
nil exit 127
io.popen 启动一个新进程执行命令,并返回一个文件句柄,可以使用该文件句柄读取返回的数据。
例如,或通过这个方法获得文件列表
local f = io.popen("ls")
print(f:read("*a"))
自定义模块 function
LOG = require('log')
print(LOG)
LOG()
------- 导出函数 log.lua
local function log(self)
print('hello log')
end
return log
自定义模块 object
logging = require('logging')
logging.msg()
local logger = logging.file("test%s.log", "%Y-%m-%d")
5.2 版本之后,require 不再定义全局变量,需要保存其返回值。
$ require "luasql.mysql"
需要写成:
$ luasql = require "luasql.mysql"
------- 导出对象 logging.lua
local logging = {}
logging._VERSION = "1.0"
function logging.msg()
print('hello logging: ', logging._VERSION)
end
if _VERSION < 'Lua 5.2' then
_G.logging = logging
end
return logging
加载路径
export LUA_PATH=$PWD/scripts/
export LUA_PATH='/opt/lua;;' # 原来的默认路径,里面没用文件
lua: ./hello.lua:5: module 'logging' not found:
no field package.preload['logging']
no file '/usr/local/share/lua/5.4/logging.lua'
no file '/usr/local/share/lua/5.4/logging/init.lua'
no file '/usr/local/lib/lua/5.4/logging.lua'
no file '/usr/local/lib/lua/5.4/logging/init.lua'
no file './logging.lua'
no file './logging/init.lua'
no file '/usr/local/lib/lua/5.4/logging.so'
no file '/usr/local/lib/lua/5.4/loadall.so'
no file './logging.so'
stack traceback:
[C]: in function 'require'
./hello.lua:5: in main chunk
[C]: in ?
root@a09a0cb548d3:~# export LUA_PATH=/opt/lua
root@a09a0cb548d3:~# ./hello.lua
hello
lua: ./hello.lua:5: module 'logging' not found:
no field package.preload['logging']
no file '/opt/lua'
no file '/usr/local/lib/lua/5.4/logging.so'
no file '/usr/local/lib/lua/5.4/loadall.so'
no file './logging.so'
stack traceback:
[C]: in function 'require'
./hello.lua:5: in main chunk
[C]: in ?
About Links
https://forkful.ai/zh/lua/files-and-io/creating-a-temporary-file/
LOG
https://codeberg.org/imo/log.lua
https://github.com/lunarmodules/lualogging.git
Exec
https://forkful.ai/zh/lua/files-and-io/creating-a-temporary-file/