루아 독립 실행
루아 독립 실행 (Lua Standalone)
표준 루아 배포본에는 독립 실행(standalone) 인터프리터가 포함돼요. 이 인터프리터는 스크립트 파일이나 표준 입력에서 루아 프로그램을 읽어 실행하는 명령줄 프로그램이에요. 독립 실행 인터프리터는 <prefix>/bin/lua(또는 lua5.4)에 위치해요.
기본 사용법
독립 실행 인터프리터는 세 가지 방식으로 입력을 받아요.
- 파일 인자:
lua [options] [script [args]]—script파일을 실행. - 표준 입력: 인자가 없으면 표준 입력(
stdin)을 실행. -e옵션: 명령줄에서 직접 코드 조각을 실행.
lua script.lua # 파일 실행
lua -e "print('hello')" # 코드 직접 실행
lua # REPL (인터랙티브) 진입
echo "print(1)" | lua # 표준 입력
REPL (Read-Eval-Print Loop)
인자 없이 실행하면 인터랙티브 모드가 되어, 사용자가 입력하는 각 줄을 읽고 평가하고 출력하는 REPL이 동작해요. 프롬프트는 보통 > 이고, 명령은 =로 시작하면 그 표현식의 결과를 출력해요 (예: = 1 + 1).
명령줄 옵션
독립 실행 인터프리터의 주요 옵션이에요.
-e stat— 문자열stat을 실행해요. 청크 시작 부분에 들어가요.-l mod— 실행 전에mod모듈을require로 로드해요.-l mod=file형식으로 모듈 이름을 지정할 수도 있어요.-i— 대화형 모드로 진입 (스크립트 실행 후).-v— 버전 정보 출력.-E— 환경 변수를 무시해요 (아래 참조).-W— 경고를 켜요.--— 옵션 처리를 중단하고 이후 인자를 스크립트 인자로 취급.-— 표준 입력을 스크립트 인자로 취급.
옵션의 조합과 순서에 따라 동작이 정해져요. 예를 들어 -l 여러 개를 쓸 수 있고, -e도 그렇지만, -e 뒤의 문자열은 그대로 실행돼요.
환경 변수
독립 실행 인터프리터는 여러 환경 변수를 사용해요.
LUA_INIT— 인터프리터가 시작할 때 실행할 코드(@파일명 또는 코드 문자열)로, 기본값은LUA_INIT_5_4도 고려해요.LUA_PATH—package.path의 기본값을 덮어써요.LUA_CPATH—package.cpath의 기본값을 덮어써요.LUA_INIT/LUA_INIT_5_4— 시작 코드.LUA_ENV— 시작 환경(_ENV) 코드.- 기타
W(경고),LUA_GC_*(가비지 컬렉션 조정) 등.
-E 옵션은 이러한 환경 변수를 모두 무시하고 기본값으로 동작해요.
스크립트 인자
스크립트를 실행할 때, 명령줄의 스크립트 이름 다음의 인자들은 루아 프로그램에서 ...(vararg)로 접근할 수 있어요.
-- args.lua
print(...)
$ lua args.lua a b c
--> a b c
글로벌 테이블 arg에는 스크립트 이름(arg[0])과 인자들(arg[1]부터)이 들어 있어요. arg[-1]에는 인터프리터 이름이, arg[0]에는 스크립트 이름이 담겨요.
표준 라이브러리
독립 실행 인터프리터는 시작할 때 기본적으로 모든 표준 라이브러리(base, string, table, math, io, os, coroutine, utf8, debug)와 package를 로드해요. 따라서 io.open, os.time, string.format 등을 바로 쓸 수 있어요.
경고와 오류
독립 실행 인터프리터는 오류가 발생하면 오류 메시지를 표준 오류(stderr)에 출력하고 비-제로 종료 상태로 종료해요. -W로 경고를 켜면 경고도 출력돼요. 실행 중 보호되지 않은 오류는 "unprotected error in call to Lua API" 같은 메시지로 보고돼요.
독립 실행 인터프리터와 C API
독립 실행 인터프리터는 lua.c 소스 파일에 구현되어 있어요. 이것은 내장(embed)을 위한 예시로도 활용할 수 있는 루아 자체의 C 프로그램이에요. 애플리케이션에 루아를 내장할 때는 이 인터프리터 대신 C API를 직접 사용해요.
본문
명령줄 예시
lua -e "print(os.date())" # 현재 시각 출력
lua -e "print('a')" -e "print('b')" # 여러 -e
lua -l utf8 -e "print(utf8.len('가'))" # 모듈 로드 후 사용
lua -i script.lua # 스크립트 실행 후 REPL
종료 상태
독립 실행 인터프리터는 오류 시 비-제로 상태로 종료하고, 정상 종료 시 0을 반환해요. os.exit를 호출하면 그 코드로 종료할 수 있어요.